【发布时间】:2022-02-02 19:50:05
【问题描述】:
我有一个流数组。这些流包括整数。我想只使用一个语句合并这些流。 这是一个例子:
Stream<?>[] arr = new Stream<?>[3];
arr[0] = Stream.of(1, 2, 3, 4, 5, 6, 7);
arr[1] = Stream.of(1, 2, 3, 4, 5, 6, 7);
arr[2] = Stream.of(1, 2, 3, 4, 5, 6, 7);
Stream<?> mergedStream = Stream.concat(Stream.concat(arr[0], arr[1]), arr[2]);
最后一行抛出以下错误: “以非零退出值 1 结束”,但我希望我的意图很明确。但是,我通常不知道必须合并的流的数量。 我正在考虑以下解决方案,但它不起作用:
Stream<?> mergedStream =Arrays.stream(arr).flatMap(Function.identity());
【问题讨论】:
-
我用
List<Stream<String>>尝试过,它在Java 11 和Java 17 中都有效。我也用Stream<?>[]尝试过,它也有效。它没有做什么你想让它做的事情? -
老实说,我没有那么有经验,但我只是尝试使用
mergedStream.forEach(System.out::println);打印出合并流的所有元素,它总是会返回错误“以非零退出值 1 完成"。 -
我使用 jshell 执行相同的代码(声明并初始化
arr,使用flatMap,使用forEach),它工作得很好。你正在执行什么命令来得到这个错误? -
只有这个命令会导致错误:
mergedStream.forEach(System.out::println); -
无论是什么导致您的错误“以非零退出值 1 结束”,它都不是您发布的代码。此外,尚不清楚“但它不起作用”应该描述什么问题。对于发布的代码,它与第一个变体一样好或坏。两者都可以与后续的
mergedStream.forEach(System.out::println);一起使用,但真正的解决方案不是一开始就拥有一个流数组。
标签: java arrays merge java-stream