kotlin - 不可变集合被视为可变集合。无法使用 Collections.max
问题描述
我正在使用 Camera2 API,并且正在尝试检索最大的可用图像尺寸。我想使用 Collections.max。我曾尝试用 Java 编写此代码,并且运行良好。
JAVA Ex-
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 前
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<out Array<(out) Size!>!>..Collection<Array<(out) Size!>!>?),Comparator<in Array<(out) Size!>!> !) ((MutableCollection<out Size!>..Collection<Size!>?),Comparator<in Size!>!) 可以应用于 (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 }
推荐阅读
- reactjs - 在 Headless UI Popover.Button 右侧显示图标
- python - 如何在 html 模板中显示 plotly json 对象
- excel - VBA - 将 Excel 数据导入 MS Project
- java - 在 Spring Cloud GCP pubsub 中创建特定于消息通道的线程
- c++ - 非引用的静态转换
- python - Selenium 显式等待错误地接受 EC.visibility_of_element_located xpath 元素
- java - 与多线程服务器的繁忙循环相比,Java 互斥体导致输入丢失?
- properties - 如何从属性设置器更改对象属性的子属性,以便能够(重新)设置对象?
- git - 重新规范化 repo 的整个历史记录,而不以任何其他方式创建新的提交/更改历史记录
- proxy - 为什么当我通过 Jmeter 代理执行搜索事务时应用程序会抛出错误,但当我手动执行事务时不会?