sortBy()选择器未对列表进行排序

时间:2019-03-02 00:39:21

标签: kotlin

我有一条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)}

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

2 个答案:

答案 0 :(得分:3)

您必须分配sortedBy的输出。

  animals = animals.sortedBy { strLength(it) }

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

答案 1 :(得分:1)

sortedBy不对列表进行排序,而是返回一个对元素进行排序的新列表。如果您不需要新列表,只需使用sortBy