我正在尝试解析由以下定义的数据对象列表:
data class BookInfo(
val id: Int?,
val description: String)
我收到此BookInfo
的列表,最多可能有 50 个。
我正在尝试按 id 重新分组书籍列表,然后在每个按 id 重新分组的BookInfo
列表中运行 forEach
像这样:
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
的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"),
我知道这似乎解释得很奇怪
任何想法,如何去做
您可以执行groupBy
,然后获取结果地图的values
。例:
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)
输出:
[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)]