不可变集合被视为可变集合。无法使用 Collections.max
Immutable Collection Treated as Mutable. Cannot use Collections.max
我正在使用 Camera2 API,我正在尝试检索最大的可用图像尺寸。我想使用 Collections.max。我尝试在 Java 中编写这段代码,它工作正常。
JAVA前-
CameraCharacteristics characteristics
= manager.getCameraCharacteristics(cameraId);
// We don't use a front facing camera in this sample.
Integer facing = characteristics.get(CameraCharacteristics.LENS_FACING);
if (facing != null && facing == CameraCharacteristics.LENS_FACING_FRONT) {
continue;
}
StreamConfigurationMap map = characteristics.get(
CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
if (map == null) {
continue;
}
// For still image captures, we use the largest available size.
Size largest = Collections.max(
Arrays.asList(map.getOutputSizes(ImageFormat.JPEG)),
new CompareSizesByArea());
但是,Kotlin 等价物在 Collections.max
操作方面存在问题。
Kotlin Ex-
val characteristics = manager.getCameraCharacteristics(cameraId)
val map = characteristics.get(
CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP
) ?: continue
// for still image captures, we use the largest available size
val largest = Collections.max(
listOf(map.getOutputSizes(ImageFormat.JPEG)),
CompareSizesByArea()
)
错误说,
None of the following substitutions ((MutableCollection<out
Array<(out) Size!>!>..Collection<Array<(out) Size!>!>?),Comparator<in
Array<(out) Size!>!>!) ((MutableCollection<out
Size!>..Collection<Size!>?),Comparator<in Size!>!) can be applied to
(List<Array<(out) Size!>!>,CompareSizesByArea)
我不确定如何更正我的代码。我可以在其他情况下使用 Collections.max,例如
val test = listOf(1,2,3,4,3,2,1)
Collections.max(test)
问题是输出大小的映射??
Arrays.asList()
,正如您在 Java 代码中使用的那样,将数组转换为 List
。所以你有一个 List<Size>
.
listOf()
,正如您在 Kotlin 代码中使用的那样,创建您传递给它的项目列表。在这种情况下,您将一个项目传递给它,一个数组。因此,您正在创建一个 List<Array<Size>>
,其中包含一个对象,即大小数组。
在 Kotlin 中执行 Arrays.asList()
的等效方法是简单地在数组上调用 .asList()
:
val largest = Collections.max(
map.getOutputSizes(ImageFormat.JPEG).asList(),
CompareSizesByArea()
)
但是,如果您打算纯粹在 Kotlin 中执行此操作,则可以跳过 Collections
函数并更简单地执行此操作:
val largest = map.getOutputSizes(ImageFormat.JPEG).maxBy { it.width * it.height }
我正在使用 Camera2 API,我正在尝试检索最大的可用图像尺寸。我想使用 Collections.max。我尝试在 Java 中编写这段代码,它工作正常。
JAVA前-
CameraCharacteristics characteristics
= manager.getCameraCharacteristics(cameraId);
// We don't use a front facing camera in this sample.
Integer facing = characteristics.get(CameraCharacteristics.LENS_FACING);
if (facing != null && facing == CameraCharacteristics.LENS_FACING_FRONT) {
continue;
}
StreamConfigurationMap map = characteristics.get(
CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
if (map == null) {
continue;
}
// For still image captures, we use the largest available size.
Size largest = Collections.max(
Arrays.asList(map.getOutputSizes(ImageFormat.JPEG)),
new CompareSizesByArea());
但是,Kotlin 等价物在 Collections.max
操作方面存在问题。
Kotlin Ex-
val characteristics = manager.getCameraCharacteristics(cameraId)
val map = characteristics.get(
CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP
) ?: continue
// for still image captures, we use the largest available size
val largest = Collections.max(
listOf(map.getOutputSizes(ImageFormat.JPEG)),
CompareSizesByArea()
)
错误说,
None of the following substitutions ((MutableCollection<out Array<(out) Size!>!>..Collection<Array<(out) Size!>!>?),Comparator<in Array<(out) Size!>!>!) ((MutableCollection<out Size!>..Collection<Size!>?),Comparator<in Size!>!) can be applied to (List<Array<(out) Size!>!>,CompareSizesByArea)
我不确定如何更正我的代码。我可以在其他情况下使用 Collections.max,例如
val test = listOf(1,2,3,4,3,2,1)
Collections.max(test)
问题是输出大小的映射??
Arrays.asList()
,正如您在 Java 代码中使用的那样,将数组转换为 List
。所以你有一个 List<Size>
.
listOf()
,正如您在 Kotlin 代码中使用的那样,创建您传递给它的项目列表。在这种情况下,您将一个项目传递给它,一个数组。因此,您正在创建一个 List<Array<Size>>
,其中包含一个对象,即大小数组。
在 Kotlin 中执行 Arrays.asList()
的等效方法是简单地在数组上调用 .asList()
:
val largest = Collections.max(
map.getOutputSizes(ImageFormat.JPEG).asList(),
CompareSizesByArea()
)
但是,如果您打算纯粹在 Kotlin 中执行此操作,则可以跳过 Collections
函数并更简单地执行此操作:
val largest = map.getOutputSizes(ImageFormat.JPEG).maxBy { it.width * it.height }