Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在kotlin中对多个列表进行元素求和_Java_Android_Kotlin - Fatal编程技术网

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)
                }
            }