Java 8流从两个或多个列表中添加值

时间:2015-02-18 19:46:10

标签: java java-8

我正在尝试进入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 = ...

2 个答案:

答案 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的开发者。