我有一条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)}
但是,它仅打印初始订单。知道为什么吗?
答案 0 :(得分:3)
您必须分配sortedBy
的输出。
animals = animals.sortedBy { strLength(it) }
因为与Kotlin中的许多其他功能一样,sortedBy
不会改变输入和荣誉不变性。因此它返回一个新的集合。因此,它减轻了副作用。 Kotlin鼓励这种不变的方法。但是,如果需要的话,这些集合也有可变的对应对象。
答案 1 :(得分:1)
sortedBy
不对列表进行排序,而是返回一个对元素进行排序的新列表。如果您不需要新列表,只需使用sortBy
。