【发布时间】:2019-08-11 10:39:33
【问题描述】:
我有一个整数列表,比如 list1,我想获得另一个列表 list2,其中包含从开始到当前索引的累积总和。如何使用 Stream API java 8 做到这一点?
List<Integer> list1 = new ArrayList<>();
list1.addAll(Arrays.asList(1, 2, 3, 4));
List<Integer> list2 = new ArrayList<>();
// initialization
list2.add(list1.get(0));
for(int i=1;i<list1.size();i++) {
// increment step
list2.add(list2.get(i-1) + list1.get(i));
}
如何将上述命令式代码更改为声明式?
list2 should be [1, 3, 6, 10]
【问题讨论】:
-
您会从答案中注意到,任何使用流的解决方案都会效率低下。流并不真正适用于这个用例。 (一般来说,流并不打算替换所有命令式代码。)
-
@LouisWasserman 我同意。但在这种情况下,我不关心效率(可能应该在问题中提到它)。我想用上面提到的命令式风格以外的东西写同样的东西。我自己做不到,因为我被卡住了,因为解决方案是 map 和 reduce 操作的混合
-
伙计,这里缺少元组真的很痛苦。
-
昨天问了一个极其相似的问题:stackoverflow.com/questions/55230261/…
标签: java java-8 java-stream