Kotlin 不可变的集合被视为可变的。无法使用Collections.max
我正在使用Camera2 API,我正在尝试检索最大的可用图像大小。我想使用Collections.max。我曾尝试用Java编写此代码,效果很好 爪哇交易所-Kotlin 不可变的集合被视为可变的。无法使用Collections.max,kotlin,collections,android-camera,android-camera2,Kotlin,Collections,Android Camera,Android Camera2,我正在使用Camera2 API,我正在尝试检索最大的可用图像大小。我想使用Collections.max。我曾尝试用Java编写此代码,效果很好 爪哇交易所- CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); // We don't use a front facing camera in this sample
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
操作中存在问题
科特林交易所-
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()
)
错误是
以下替换((MutableCollection..Collection?、Comparator!)((MutableCollection..Collection?、Comparator!))都不能应用于
(列表、比较结果)
我不知道如何更正我的代码。我可以在其他实例中使用Collections.max,例如
val test = listOf(1,2,3,4,3,2,1)
Collections.max(test)
问题是输出大小的映射???数组。在Java代码中使用的asList()
将数组转换为列表。所以您有一个列表
listOf()
,正如您在Kotlin代码中使用的一样,创建一个您传递给它的项目列表。在本例中,您向它传递一个项目,即数组。因此,您正在创建一个列表
,其中包含一个对象,即大小数组
在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 }
在Java代码中使用的Arrays.asList()
,将数组转换为List
。所以您有一个列表
listOf()
,正如您在Kotlin代码中使用的一样,创建一个您传递给它的项目列表。在本例中,您向它传递一个项目,即数组。因此,您正在创建一个列表
,其中包含一个对象,即大小数组
在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 }
你试过了吗?maxBy?是的,为了将来的参考,maxBy
是一件事,在我走了十分钟之后,“为什么max
不做这个Compariable
?”我总是需要提醒自己。maxBy?是的,为了将来的参考,maxBy
是一件事,我走后总是需要提醒自己“为什么max
不处理这个compariable
?”十分钟解释得很好!现在可以了。谢谢你解释得很好!现在可以了。谢谢