kotlin - 将 Java 列表 sort(..) lambda 表达式转换为 kotlin
问题描述
我有以下两个列表:
ArrayList<String> staticlist = new ArrayList<String>()
staticlist.add("Dairy")
staticlist.add("Food")
staticlist.add("Juice")
staticlist.add("Bakery")
staticlist.add("Poultry")
ArrayList<String> mySortedItems= new ArrayList<String>()
staticlist.add("Food")
staticlist.add("Poultry")
staticlist.add("Juice")
staticlist.add("Bakery")
在 java 中,根据 staticlist 对 mysortedItems 进行排序是这样的:
mySortedItems.sort((s1,s2)-> Integer.compare(mySortedItems.indexOf(s1),mySortedItems.indexOf(s1)))
现在如何将其转换为 kotlin?
API 级别应保持在 17
解决方案
Bracadabra 的答案可以正常工作,但是如果您查看 lambda,您会注意到它比较了应用于s1
and的相同函数s2
,这意味着可以使用 来简化它sortBy
:
mySortedItems.sortBy { staticlist.indexOf(it) }
(从“根据静态列表排序 mysortedItems”我假设你想使用staticlist.indexOf(s1)
而不是mySortedItems.indexOf(s1)
)
如果需要,请使用sortedBy
返回新的排序列表。
作为附加说明,与其创建一个空列表并向其中添加每个元素,不如调用 Kotlin 风格
val staticlist = listOf("Dairy", "Food", "Juice", "Bakery", "Poultry")
或mutableListOf
/ arrayListOf
/等。取决于所需的类型。
推荐阅读
- angular - 带有Http请求的Angular Mat表分页页面索引
- c++ - OponGL 4.1 是否可以绑定一些顶点数据并同时用于顶点数组和着色器程序的统一缓冲区?
- graylog2 - 如何在 Graylog 中仅搜索今天的数据
- python-3.x - “范围”对象不支持 python3 中的项目分配
- python - 使用 JmesPath 过滤 CloudTrail 日志
- android - 如何在 android 中优化 Emoji 渲染?
- winapi - 使用淡入过渡显示窗口 2 次以上
- git - 致命:无法访问“https://github.com/usename/my-project.git/”:请求的 URL 返回错误:403 Mac
- c# - C# Unity JsonUtility,如何将这个简单的 json 转换为某种有用的 c# 对象?
- html - 如何使一个元素中的文本与另一个元素中的文本内联显示?