我有点困惑为什么这不起作用。我有一个Animations
中的简单override fun onAnimationStart(fragment: Fragment, animation: Animation, enter: Boolean) {
if (fragment == newFragment) {
toolbar.animation = animation
}
}
,我想以自己的方式通过Iterable
进行排序。我想像这样传递一个lambda:
String
但是,这似乎不起作用。错误提示
类型不匹配。必需的kotlin.Comparator
找到:(String,String)-> Int
比较器是功能接口,所以我应该能够将其作为Lambda传递,不是吗?
答案 0 :(得分:4)
从Kotlin 1.2开始,仅Java接口支持SAM转换。 kotlin.Comparator
是Kotlin中定义的接口,对于此类接口,不支持将lambda转换为这些接口的实现。
答案 1 :(得分:1)
yole已经提供了原因,这是方法:
setOf("a", "b", "c").toSortedSet(object: Comparator<String>{
override fun compare(s1: String, s2: String): Int {
return s1.compareTo(s2) // replace with own logic
}
})
或者这样:
val comp = object: Comparator<String> {
override fun compare(s1: String, s2: String): Int {
return s2.compareTo(s1) // replace with own logic
}
}
sortedSetOf(comp, "a", "b", "c")
答案 2 :(得分:0)
答案 3 :(得分:0)
不确定这是否是新的,但是您可以这样做:
val set = listOf("a", "c", "b").toSortedSet(Comparator { s1, s2 ->
s1.compareTo(s2) // replace with own logic
})