Java 如何在kotlin中对多个列表进行元素求和
我想按项目总数组合两个项目列表,按其计数分组。对象定义:Java 如何在kotlin中对多个列表进行元素求和,java,android,kotlin,Java,Android,Kotlin,我想按项目总数组合两个项目列表,按其计数分组。对象定义:Item(名称:String,计数:Long} var list1 : MutableList<Item> = //From API 1 call var list2 : MutableList<Item>= //From API 2 call 输出如下: Final list: [{"pen",8}, {"pencil", 3}, {"chair", 2}] 如何在kotlin中使用任何内置的收集功能?您必须
Item(名称:String,计数:Long}
var list1 : MutableList<Item> = //From API 1 call
var list2 : MutableList<Item>= //From API 2 call
输出如下:
Final list: [{"pen",8}, {"pencil", 3}, {"chair", 2}]
如何在kotlin中使用任何内置的收集功能?您必须使用和:
可以添加列表、分组,然后映射值:
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) }
val l=list1+list2
val r=l.groupBy{it.name}//Map
.mapValues{it.value.map{it.count}.sum()}//map
.toList()//列表
.map{p->Item(p.first,p.second)}
谢谢@Pelocho:)我该怎么办!!正如文档(答案中的lisked)所规定的:从第一个元素开始累加值,并从左到右对当前累加器值和每个元素应用操作。感谢您的回答。但我不需要PelochoOk指定的对象映射,我对其进行了一些简化,并添加了toList()
以获取列表,而不是Map@amorfis我想他想要的是一张单子而不是一张双人单子
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) }
data class Product(val productId: String, val quantity: Double)
val groupedProducts = products
.groupBy { it.productId }
.values
.map {
it.reduce {
accumulator, product ->
product.copy(quantity = accumulator.quantity + product.quantity)
}
}