带拆分功能sortBy

时间:2019-03-09 19:12:13

标签: kotlin

我有此代码:

fun main(args:Array<String>){
   var a = "eat,animal,banana"
   var a1 = a.split(",")
   a1.sortBy{z.toCharArray().count() { z == 'a' } }
}

但是尽管a1是一个ArrayList,但是代码无法正常工作...所以我不明白为什么它不起作用...

我收到错误消息:(19, 22) Kotlin: Unresolved reference: a1

能帮我吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

sortBy对当前列表进行排序,因此该列表需要可变(可以更改)。 普通列表不是可变的,所以这就是为什么没有sortBy方法的原因。

您可以改用sortedBy,它返回一个新列表。

创建新列表:

val a = listOf("eat","animal","banana")
val newList = a.sortedBy { word -> word.count { letter -> letter == 'a' } }

或使列表可变并对其重新排序:

val a = mutableListOf("eat","animal","banana")
a.sortBy { word -> word.count { letter -> letter == 'a' } }

答案 1 :(得分:0)

错误指向sortBy,因为split()返回了List,并且sortBy对象没有List方法。
您必须像这样创建MutableList

var a1 = a.split(",").toMutableList()

,然后另一个错误是在lambda中使用未定义的z而不是隐式参数it
因此更改为:

a1.sortBy{ it.toCharArray().count { it == 'a' } }

如果您将z定义为lambda参数,则可以使用它,如下所示:

a1.sortBy{ z -> z.toCharArray().count { z -> z == 'a' } }