Kotlin:用于计算列表中出现次数的高阶函数?

Kotlin: Higher-order functions to count the amount of occurrences in a List?

我正在尝试使用 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 函数会 returns 0 或 list.size 因为它会检查相同的东西 list.size 次。

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