Kotlin:更高级的函数来计算列表中出现的数量?

我正在尝试使用Kotlin的高阶函数来计算列表中包含特定元素的次数。 我试过类似的东西

val result: Int? = list.count{ list.contains("element") } 

但似乎是返回列表的大小,我不知道为什么。

你检查列表是否包含一个给定的元素(这将导致0或者列表的大小),尽管你真正想要的是计算与给定元素(而不是整个列表)相等的元素的数量。

你需要做的是把list.contains("element") it == "element"

count函数通过迭代列表并检查元素是否与谓词匹配。 近似的代码

 fun <T> Iterable<T>.count(predicate: (T) -> Boolean) { var count = 0 for (element in this) { if (predicate(this)) { count += 1 } } return count } 

当您传递list.contains("element")作为参数时,则count函数返回0或list.size因为它检查相同的事情list.size次。

这样做it == "element"虽然工作方式不同。 而不是检查整个列表,只检查当前元素。 如果你来自Java背景,你可能会更容易想到it一点:在Java中,如果你使用Kotlin,那么代码看起来有点像这个(element) -> element.equals("element")有一个只有1个参数的高阶函数,并没有明确地命名它,那么它默认it 。 你可以在这里阅读更多。