我正在使用 Java 8 以及包中的 Map、Reduce、Collect API java.util.stream。我有一个用例,我需要对列表的列表进行垂直求和。我的列表的结构是List<List<Integer>>
我想不出一种方法可以使用映射压缩内部列表,并减少或收集流上可用的操作。考虑以下代码。假设我的列表名为transactions. 此交易存储的是内部列表中每个商品的每笔交易中售出的商品数量。内部清单的长度对于所有交易都是相同的,因为它包含库存中每一项的一个条目。如果该项目未参与交易,则仅存储 0。
我在想一些关于
transaction.stream().map(
/*Try and put sum into an accumulator List*/
).collect(
/*Collect entries into a list*/
)
Run Code Online (Sandbox Code Playgroud)
我只是不知道如何在代码中实现这一点。网络上的所有资源都是简单的示例,不适用于集合对象。任何指示/提示将不胜感激。
因为您有 a List<List<Integer>>,所以垂直总和似乎应该产生 a List<Integer>,因为每一列都有自己的总和。假设 中的每一行都包含List<List<Integer>>相同数量的元素,最好先找到 的转置List<List<Integer>>,对每一行求和,然后将其收集回 a 中List<Integer>。您可以使用以下方法来完成此操作:
List<List<Integer>> list = Arrays.asList(
Arrays.asList(1, 2, 3, 4),
Arrays.asList(5, 6, 7, 8)
);
List<Integer> sumList = IntStream.range(0, list.get(0).size())
.mapToObj(i -> list.stream()
.mapToInt(l -> l.get(i))
.sum())
.collect(Collectors.toList());
System.out.println(sumList);
Run Code Online (Sandbox Code Playgroud)
输出:
[6, 8, 10, 12]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2683 次 |
| 最近记录: |