首页 > 解决方案 > 将 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

标签: kotlin

解决方案


Bracadabra 的答案可以正常工作,但是如果您查看 lambda,您会注意到它比较了应用于s1and的相同函数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/等。取决于所需的类型。


推荐阅读