我正在尝试进入Java 8,并试着解决各种问题并解决这个特定问题,我通常使用forEach并将值存储在Map中以解决。
您如何编写代码以使用Java 8中的新功能获取预期的列表?
List<Integer> voterA = Arrays.asList(1,2,3,4,5);
List<Integer> voterB = Arrays.asList(1,2,3,4,5);
List<List<Integer>> votes = Arrays.asList(voterA, voterB);
// expected list = (2,4,6,8,10)
List<Integer> sumVotes = ...
答案 0 :(得分:6)
那个人并不像你希望的那样可行。你可能得到的最接近的可能是
IntStream.range(0, voterA.size())
.mapToObj(i -> voterA.get(i) + voterB.get(i))
.collect(toList());
...但是没有&#34; zip&#34;在溪流上操作,很大程度上是因为两个不同的溪流可以有不同点的分裂分裂器,所以你不能正确排列它们。
答案 1 :(得分:2)
JDK不提供'zip'API。但可以使用第三个库AbacusUtil完成:
List<Integer> voterA = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> voterB = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> sumVotes = Stream.zip(voterA, voterB, (a, b) -> a + b).toList();
披露:我是AbacusUtil的开发者。