首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于对象从Kotlin中的列表中提取列表

基于对象从Kotlin中的列表中提取列表
EN

Stack Overflow用户
提问于 2022-10-07 05:54:56
回答 1查看 42关注 0票数 0

我试图解析通过以下方式定义的数据对象列表:

代码语言:javascript
复制
data class BookInfo(
        val id: Int?,
        val description: String)

我收到了这个BookInfo的列表,这个列表可能高达50。

我试图按id重新组合图书列表,然后对每个重新组合的forEach按id对BookInfo进行排序。

类似于:

val tmpList: List = BookInfo(1,"test"),BookInfo(2,"tit"),BookInfo(1,"tkllt"),BookInfo(3,"test"),BookInfo(1,"test"),BookInfo(2,"test"),BookInfo(3,"test"),BookInfo(2,"test")

然后使用tmpList.<function_in_kotlin_condition_on_id>.forEach()将运行一个forEach,结果是具有相同id的subList of BookInfo

这就像使用.filter提取一个列表,以获得具有相同id的所有BookInfo的子列表,然后在所有不同的id上运行forEach

tmpList.<extract_by_id>.forEach { sublist ....和子列表将是

BookInfo(1, "test"), BookInfo(1, "tkllt"), BookInfo(1, "test")forEach的下一个循环将是BookInfo(2, "tit"),BookInfo(2, "test"),BookInfo(2, "test"),最后是BookInfo(3, "test"),BookInfo(3, "test"),

我知道这听起来很奇怪

你知道吗,怎么做

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-07 06:11:35

您可以执行groupBy,然后获取结果映射的values。示例:

代码语言:javascript
复制
fun main() {

    val books = arrayOf(
        BookInfo(1,"a"),
        BookInfo(2,"b"),
        BookInfo(1,"c"),
        BookInfo(2,"d"),
        BookInfo(1,"e"),
        BookInfo(3,"f")
    )

    books.groupBy { it.id }.values.forEach {
        println(it)
    }

}

data class BookInfo(
    val id: Int?,
    val description: String)

输出:

代码语言:javascript
复制
[BookInfo(id=1, description=a), BookInfo(id=1, description=c), BookInfo(id=1, description=e)]
[BookInfo(id=2, description=b), BookInfo(id=2, description=d)]
[BookInfo(id=3, description=f)]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73982942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档