Java:如何添加两个整数流并产生一个新的流

时间:2019-02-16 13:19:21

标签: java java-stream

所以我有

Stream<Integer> stream1 = Stream.of(1, 2, 3, 4, 5);
Stream<Integer> stream2 = Stream.of(6, 7, 8, 9, 10);

我想制作stream3,它是stream1stream2的元素之和,即7, 9, 11, 13, 15

我该如何通过流操作来做到这一点?

3 个答案:

答案 0 :(得分:2)

由于流不太适合此操作,我建议您先收集元素,然后成对添加新流:

    IntStream stream1 = IntStream.of(1, 2, 3, 4, 5);
    IntStream stream2 = IntStream.of(6, 7, 8, 9, 10);

    int[] arr1 = stream1.toArray();
    int[] arr2 = stream2.toArray();

    IntStream sumStream = IntStream.range(0, arr1.length)
            .map(index -> arr1[index] + arr2[index]);

    sumStream.forEach(System.out::println);
7
9
11
13
15

您想检查一下两个流中元素数量相同的假设,如果没有,请做出适当的反应,这可能会引发异常。我留给你。

答案 1 :(得分:2)

您正在寻找zip操作。

在这里,您可以使用Google GuavaStreams#zip完成任务:

Stream<Integer> stream1 = Stream.of(1, 2, 3, 4, 5);
Stream<Integer> stream2 = Stream.of(6, 7, 8, 9, 10);

Streams.zip(stream1, stream2, Integer::sum)
    .forEach(System.out::println);

输出:

7
9
11
13
15

另请参阅:

答案 2 :(得分:1)

有与上述@ caco3相同的zip方法,但从StreamEx库中扩展了标准流API:

List<Integer> zip = StreamEx
    .zip(stream1.collect(toList()), stream2.collect(toList()), Integer::sum)
    .collect(toList());

System.out.println(zip);

StreamEx.zip