Kotlin groupBy用法及代码示例

本文方法及代码示例基于Kotlin 2.1.20 Released

groupBy 所在包 kotlin.sequences.groupBy,其相关用法介绍如下:

用法一

kotlin 复制代码
inline fun <T, K> Sequence<T>.groupBy(
    keySelector: (T) -> K
): Map<K, List<T>>

通过应用于每个元素的给定 keySelector 函数返回的键对原始序列的元素进行分组,并返回一个映射,其中每个组键与对应元素的列表相关联。

返回的映射保留从原始序列生成的键的条目迭代顺序。

操作是 terminal

代码示例:

kotlin 复制代码
import kotlin.test.*

fun main(args: Array<String>) {
    //sampleStart
    val words = listOf("a", "abc", "ab", "def", "abcd")
    val byLength = words.groupBy { it.length }

    println(byLength.keys) // [1, 3, 2, 4]
    println(byLength.values) // [[a], [abc, def], [ab], [abcd]]

    val mutableByLength: MutableMap<Int, MutableList<String>> = words.groupByTo(mutableMapOf()) { it.length }
    // same content as in byLength map, but the map is mutable
    println("mutableByLength == byLength is ${mutableByLength == byLength}") // true
    //sampleEnd
}

// 输出
[1, 3, 2, 4]
[[a], [abc, def], [ab], [abcd]]
mutableByLength == byLength is true

用法二

kotlin 复制代码
inline fun <T, K, V> Sequence<T>.groupBy(
    keySelector: (T) -> K, 
    valueTransform: (T) -> V
): Map<K, List<V>>

通过应用于元素的给定keySelector 函数返回的键对应用于原始序列的每个元素的valueTransform 函数返回的值进行分组,并返回一个映射,其中每个组键与对应值的列表相关联。

返回的映射保留从原始序列生成的键的条目迭代顺序。

操作是 terminal

代码示例:

kotlin 复制代码
import kotlin.test.*

fun main(args: Array<String>) {
    //sampleStart
    val nameToTeam = listOf("Alice" to "Marketing", "Bob" to "Sales", "Carol" to "Marketing")
    val namesByTeam = nameToTeam.groupBy({ it.second }, { it.first })
    println(namesByTeam) // {Marketing=[Alice, Carol], Sales=[Bob]}

    val mutableNamesByTeam = nameToTeam.groupByTo(HashMap(), { it.second }, { it.first })
    // same content as in namesByTeam map, but the map is mutable
    println("mutableNamesByTeam == namesByTeam is ${mutableNamesByTeam == namesByTeam}") // true
    //sampleEnd
}

// 输出
{Marketing=[Alice, Carol], Sales=[Bob]}
mutableNamesByTeam == namesByTeam is true

相关方法

相关推荐
程序员陆业聪1 小时前
Compose Strong Skipping Mode 的真相:它并不会让你的类型变 Stable
android
阿巴斯甜5 小时前
launch 和 async 内部都是串行,为什么还能实现并发?
kotlin
shaoming37766 小时前
浏览器动作开发:地址栏图标点击事件、弹出页面设计
android·mysql·adb
古怪今人6 小时前
Gradle构建工具 Groovy/Kotlin DSL的现代化自动化构建工具
开发语言·kotlin·自动化
赏金术士6 小时前
Kotlin 协程与挂起函数(Coroutines & suspend)入门到实战
android·开发语言·kotlin
泡泡以安8 小时前
Unidbg学习笔记(十三):固定随机干扰项
android·逆向
泡泡以安8 小时前
Unidbg学习笔记(十六):Console Debugger
android·逆向
赏金术士8 小时前
Room + Flow 完整教程(现代 Android 官方方案)
android·kotlin·room·compose
泡泡以安8 小时前
Unidbg学习笔记(八):文件系统层补环境
android·逆向
泡泡以安8 小时前
Unidbg学习笔记(六):补环境的思维框架
android·逆向