【发布时间】:2018-04-23 16:39:55
【问题描述】:
我有一个方法需要以多种可能的方式对集合进行排序。我不想多次调用myCollection.sortedBy,而是希望将我传递给sortedBy的lambda放在一个变量中,然后我将该变量传递给对sortedBy的一次调用。但是,我无法弄清楚该 lambda 变量应该具有的类型。请记住,“排序字段”可能有不同的类型(但显然它们都是Comparable)。
这是我的问题的简化版本:
data class Person(val name: String, val age: Int)
enum class SortBy {
NAME, AGE
}
fun main(args: Array<String>) {
val people = listOf(Person("John", 30), Person("Mary", 20))
val sort = SortBy.NAME
val comparator = when (sort) {
SortBy.NAME -> { p: Person -> p.name }
SortBy.AGE -> { p: Person -> p.age }
}
// the line below won't compile
people.sortedBy(comparator).forEach(::println)
}
有什么想法吗?
【问题讨论】:
标签: sorting lambda collections kotlin