如何在Kotlin中按id分组BookInfo列表并遍历每组子列表?
Kotlin按ID分组并有序遍历子列表实现方案
你可以通过Kotlin标准库的groupBy+sortedBy+forEach组合实现需求,具体步骤如下:
- 按ID分组:用
groupBy方法将列表按BookInfo的id字段分组,得到以id为键、对应子列表为值的Map。 - 按ID排序分组:由于
groupBy返回的Map不保证键的顺序,需对分组后的条目按id升序排序,确保处理顺序符合预期。 - 遍历每个分组子列表:对排序后的分组条目执行
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
相关产品推荐
相关产品推荐

