【问题标题】:Merging streams that are stored in array合并存储在数组中的流
【发布时间】: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&lt;Stream&lt;String&gt;&gt; 尝试过,它在Java 11 和Java 17 中都有效。我也用Stream&lt;?&gt;[] 尝试过,它也有效。它没有做什么你想让它做的事情?
  • 老实说,我没有那么有经验,但我只是尝试使用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


【解决方案1】:

不妨试试Stream&lt;Integer&gt;[] arr = new Stream&lt;Integer&gt;[3];

【讨论】:

  • java 不允许这样做,因为您正在尝试创建一个通用数组
猜你喜欢
  • 2012-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
相关资源
最近更新 更多