Java map / collect for Stream to sum List of Lists

时间:2018-05-06 17:32:35

标签: java java-stream

我正在使用Java 8,以及来自包java.util.stream的Map,Reduce,Collect API。 我有一个用例,我需要垂直排列列表。 我的列表结构是List<List<Integer>> 我无法想到一种可以使用地图压缩内部列表的方法,并减少或收集流上可用的操作。 请考虑以下代码。 说我的列表名为transactions。 此事务存储的内容是内部列表中每个项目在每个事务中销售的项目数量。内部列表的长度对于所有事务都是相同的,因为它包含清单中每个项目的一个条目。如果该项目不参与交易,则只存储0。

我正在思考

的内容
transaction.stream().map(
      /*Try and put sum into an accumulator List*/
).collect(
      /*Collect entries into a list*/
)

我无法想象如何在代码中实现这一点。 Web上的所有资源都是无法处理集合对象的简单示例。任何指针/提示将非常感激。

1 个答案:

答案 0 :(得分:3)

因为您有一个append: true,所以似乎垂直总和应该生成List<List<Integer>>,因为每列都有自己的总和。假设List<Integer>中的每一行都包含相同数量的元素,最好首先找到List<List<Integer>>的转置,对每一行求和,然后将其收回到{{1} }。您可以使用以下方法执行此操作:

List<List<Integer>>

输出:

List<Integer>