You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin中按id分组BookInfo列表并遍历每组子列表?

Kotlin按ID分组并有序遍历子列表实现方案

你可以通过Kotlin标准库的groupBy+sortedBy+forEach组合实现需求,具体步骤如下:

  1. 按ID分组:用groupBy方法将列表按BookInfo的id字段分组,得到以id为键、对应子列表为值的Map。
  2. 按ID排序分组:由于groupBy返回的Map不保证键的顺序,需对分组后的条目按id升序排序,确保处理顺序符合预期。
  3. 遍历每个分组子列表:对排序后的分组条目执行forEach,处理每个同ID的子列表。

完整代码示例

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

fun main() {
    val tmpList: List<BookInfo> = listOf(
        BookInfo(1, "test"),
        BookInfo(2, "tit"),
        BookInfo(1, "tkllt"),
        BookInfo(3, "test"),
        BookInfo(1, "test"),
        BookInfo(2, "test"),
        BookInfo(3, "test"),
        BookInfo(2, "test")
    )

    // 按id分组 → 按id升序排序分组 → 遍历每个分组
    tmpList.groupBy { it.id }
        .entries.sortedBy { it.key } // 按id升序排列,需降序可改用sortedByDescending
        .forEach { (groupId, books) ->
            println("开始处理ID为$groupId的书籍列表:")
            books.forEach { book ->
                println("  - 书籍描述:${book.description}")
            }
            println("------------------------")
        }
}

代码说明

  • groupBy { it.id }:将列表中的BookInfo按id分组,生成Map<Int?, List<BookInfo>>结构。
  • entries.sortedBy { it.key }:将Map的键值对按id升序排序,保证处理顺序是ID从1到3(若存在null的id,会排在所有非null值之后)。
  • 外层forEach遍历每个分组,(groupId, books)分别对应分组ID和该ID下的所有书籍子列表,你可以在这个代码块中编写具体的业务处理逻辑。

如果业务场景中id不会为null,可将id的类型改为Int(去掉问号),排序逻辑会更简洁。

内容的提问来源于stack exchange,提问作者Seb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:35:36