如何做kotlin中的多个列表元素的总和
我想把两个项目列表按项目数量组合在一起计数。 对象定义: Item (name:String, count:Long}
var list1 : MutableList<Item> = //From API 1 call var list2 : MutableList<Item>= //From API 2 call
例:
Item 1: [{"pen",2}, {"pencil", 3}] Item 2: [{"pen",6}, {"chair", 2}]
输出如:
Final list: [{"pen",8}, {"pencil", 3}, {"chair", 2}]
如何使用任何集合内置功能在kotlin中实现?
你将不得不使用groupBy
并reduce
:
val itemsCount = (list1 + list2) // concat lists .groupBy { it.name } // group items by name .values // take list of values .map { // for each list it.reduce { // accumulate counts acc, item -> Item(item.name, acc.count + item.count) } }
您可以添加列表,组,然后映射值:
val l = list1 + list2 val r = l.groupBy { it.name } //Map<String, List<Item>> .mapValues { it.value.map { it.count }.sum() } //Map<String, Long> .toList() //List<Pair<String, Long>> .map { p -> Item(p.first, p.second) }