我有一个sortedBy{}语句,该语句打算按List元素的长度对String进行排序:

var animals: List<String> = listOf("tiger", "cat", "dragon", "elephant")
fun strLength(it: String) = it.length
animals.sortedBy { strLength(it) }
animals.forEach {println(it)}

但是,它仅打印初始订单。知道为什么吗?

最佳答案

您必须分配sortedBy的输出。

  animals = animals.sortedBy { strLength(it) }

因为和Kotlin中的许多其他功能一样,sortedBy不会改变输入和荣誉不变性。因此它返回一个新的集合。因此,它减轻了副作用。 Kotlin鼓励这种不变的方法。但是,如果需要,这些集合也有可变的对应项。

10-07 19:47
查看更多