📜  Kotlin 分组

📅  最后修改于: 2022-05-13 01:55:06.753000             🧑  作者: Mango

Kotlin 分组

Kotlin 标准库借助扩展函数帮助对集合元素进行分组。分组意味着按类别收集项目。在这里,我们有一个groupBy()函数,它接受 lambda函数并返回一个映射。在这个映射中,每个键是 lambda 的结果,对应的值是元素列表。
我们还可以将groupBy()函数与第二个 lambda 表达式一起使用,也称为值转换函数。如果我们使用两个 lambda 函数,那么keySelector的生成键映射到值转换函数的结果而不是原始元素。

Kotlin 程序演示使用 groupBy()函数-

fun main(args: Array) {
    val fruits = listOf("apple", "apricot", "banana",
        "cherries", "berries", "cucumber")
    println(fruits.groupBy { it.first().toUpperCase() })
    println(fruits.groupBy(keySelector = { it.first() },
        valueTransform = { it.toUpperCase() }))
}

输出:

{A=[apple, apricot], B=[banana, berries], C=[cherries, cucumber]}
{a=[APPLE, APRICOT], b=[BANANA, BERRIES], c=[CHERRIES, CUCUMBER]}

如果我们想对分组元素应用一些操作,那么可以通过groupingBy()函数一次将函数应用于所有组来完成。将返回一个分组类型的实例。

我们可以对组执行这些操作:

  • eachcount():它计算每个组中的项目。
  • fold() 和 reduce():分别对每个组执行这些操作并返回结果。
  • 聚合():它是一种通用的分组方式,意味着随后对每个组中的所有元素应用特定的操作并返回结果。因此,它用于实现自定义操作。

Kotlin 程序演示 groupingBy()函数-

fun main(args: Array) {
    val fruits = listOf("apple", "apricot", "banana",
        "cherries", "berries", "cucumber")
    println(fruits.groupingBy { it.first() }.eachCount())
}

输出:

{a=2, b=2, c=2}