Kotlin 不可变的集合被视为可变的。无法使用Collections.max

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

我正在使用Camera2 API,我正在尝试检索最大的可用图像大小。我想使用Collections.max。我曾尝试用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
操作中存在问题

科特林交易所-

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
?”十分钟解释得很好!现在可以了。谢谢你解释得很好!现在可以了。谢谢