kotlin的groupBy用法

该篇文章展示了Kotlin中如何使用groupBy函数对数据对象列表按指定属性进行分组。通过一个简单的NameObj数据类,创建了一个包含code、name、age和child属性的对象列表。然后,文章演示了groupBy函数的一个参数版本,将列表按code属性分组,以及两个参数版本,同时按code和child属性进行分组,展示出不同的分组结果。
摘要由CSDN通过智能技术生成

kotlin的groupBy用法

groupBy 的简单用法

data class NameObj(
    val code: String,
    val name: String,
    val age: Int,
    val child: List<Int>? = null
) {}
fun main(args: Array<String>) {
    val list = mutableListOf<NameObj>()
    list.add(
        NameObj(
            code = "human",
            name = "张三",
            age = 12,
            child = listOf(34, 3402)
        )
    )
    list.add(
        NameObj(
            code = "human",
            name = "李四",
            age = 12,
            child = listOf(34, 340202)
        )
    )
    list.add(
        NameObj(
            code = "divine",
            name = "龙",
            age = 120,
            child = listOf(41, 4127)
        )
    )
    list.add(
        NameObj(
            code = "divine",
            name = "凤",
            age = 122,
            child = listOf(41, 412723)
        )
    )
    list.add(
        NameObj(
            code = "beast",
            name = "猪",
            age = 122
        )
    )

	// 只有一个参数
    val listGroup = list.groupBy { it.code }
    println(listGroup)
    /* 返回值
    {
	    human=[
	    	NameObj(code=human, name=张三, age=12, child=[34, 3402]), 
	    	NameObj(code=human, name=李四, age=12, child=[34, 340202])
	    ], 
	    divine=[
	    	NameObj(code=divine, name=龙, age=120, child=[41, 4127]), 
	    	NameObj(code=divine, name=凤, age=122, child=[41, 412723])
	    ], beast=[
	    	NameObj(code=beast, name=猪, age=122, child=null)
	    ]
    }
    */
	// 两个参数
    val listGroup1 = list.groupBy({it.code } , {it.child})
    println(listGroup1)
    /* 返回值
    {
    	human=[[34, 3402], [34, 340202]], 
    	divine=[[41, 4127], [41, 412723]], 
    	beast=[null]
    }
    */
}
Kotlin 中,`groupBy` 是一个很有用的函数,它可以将一个列表按照某个条件进行分组,并返回一个 `Map` 对象,其中 key 是分组的条件,value 是该条件下的所有元素组成的列表。 `groupBy` 接收一个 lambda 表达式作为参数,该 lambda 表达式会根据元素返回一个 key,表示该元素应该分到哪个组中。例如,假设有一个包含若干 Person 对象的列表,每个 Person 对象有一个 age 属性,我们可以按照年龄分组,代码如下: ```kotlin val people = listOf( Person("Alice", 25), Person("Bob", 30), Person("Charlie", 25), Person("Dave", 30) ) val groups = people.groupBy { it.age } println(groups) // 输出:{25=[Person(name=Alice, age=25), Person(name=Charlie, age=25)], 30=[Person(name=Bob, age=30), Person(name=Dave, age=30)]} ``` 在上面的例子中,`groupBy` 函数将 people 列表按照 Person 对象的 age 属性进行分组,返回一个 `Map<Int, List<Person>>` 对象,其中 key 是年龄,value 是该年龄下的所有 Person 对象组成的列表。 除了 lambda 表达式外,`groupBy` 还可以接收一个可选的 transform 函数作为参数,用于将元素转换为分组的条件。例如,上面的例子可以写成这样: ```kotlin val groups = people.groupBy(Person::age) println(groups) // 输出:{25=[Person(name=Alice, age=25), Person(name=Charlie, age=25)], 30=[Person(name=Bob, age=30), Person(name=Dave, age=30)]} ``` 这里的 `Person::age` 就是一个 transform 函数,它将 Person 对象映射为它的 age 属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值