【发布时间】:2021-10-18 08:35:25
【问题描述】:
我正在尝试根据某种类型以及它们是否按顺序对列表进行分组
data class Item(val type: Int, val name: String)
private fun splitItems(items: List<Item>): List<List<Item>> {
val groupedItems = mutableListOf<List<Item>>()
var tempList = mutableListOf<Item>()
items.mapIndexed { index, item ->
if (index > 0) {
val previousItem = items[index - 1]
if (previousItem.type == item.type) {
tempList.add(item)
} else {
if (tempList.isNotEmpty()) groupedItems.add(tempList)
tempList = mutableListOf()
tempList.add(item)
}
} else tempList.add(item)
}
if (tempList.isNotEmpty()) groupedItems.add(tempList)
return groupedItems
}
现在这个乐趣会发生
val items = mutableListOf(
Item(1, "Shirt"),
Item(1, "Shirt"),
Item(2, "Pant"),
Item(2, "Pant"),
Item(2, "Pant"),
Item(1, "Shirt"),
Item(1, "Shirt"),
Item(3, "Tee"),
Item(3, "Tee"),
Item(2, "Pant"),
Item(2, "Pant"),
Item(1, "Shirt"),
Item(1, "Shirt"),
Item(1, "Shirt")
)
然后返回
[Item(type=1, name=Shirt), Item(type=1, name=Shirt)]
[Item(type=2, name=Pant), Item(type=2, name=Pant), Item(type=2, name=Pant)]
[Item(type=1, name=Shirt), Item(type=1, name=Shirt)]
[Item(type=3, name=Tee), Item(type=3, name=Tee)]
[Item(type=2, name=Pant), Item(type=2, name=Pant)]
[Item(type=1, name=Shirt), Item(type=1, name=Shirt), Item(type=1, name=Shirt)]
这是按预期工作的。由于我正在尝试学习 Kotlin,并且我知道有一种很好的方法可以做到这一点,所以我想知道如何以 kotlin 的方式简化这个逻辑。
【问题讨论】:
-
使用类型为键、ArrayList
- 为值的HashMap。
-
请问您的用例是什么?通常我们会使用
groupBy或类似的实用程序,但它不会在结果中保留“序列”信息。所以我想知道为什么你需要这个数据结构作为输出。 -
其实物品是按时间排序的,我需要保留顺序
-
另一种方法可能是使用
fold()。 (抱歉,现在没时间写东西;之前的问题中可能有示例。 或者它会成为一个有启发性的练习 :-)
标签: kotlin