一尘不染

您可以将一个流分成两个流吗?

java

我有一个由Java 8流表示的数据集:

Stream<T> stream = ...;

我可以看到如何对其进行过滤以获取随机子集-例如

Random r = new Random();
PrimitiveIterator.OfInt coin = r.ints(0, 2).iterator();   
Stream<T> heads = stream.filter((x) -> (coin.nextInt() == 0));

我还可以看到如何减少该流,例如得到两个表示数据集的两个随机一半的列表,然后将它们转换回流。但是,是否有直接方法可以从最初的一个生成两个流?就像是

(heads, tails) = stream.[some kind of split based on filter]

感谢您的任何见解。


阅读 236

收藏
2020-09-09

共1个答案

一尘不染

不完全是。您不可能一分之二Stream。这没有道理-您将如何遍历一个而不需要同时生成另一个?流只能操作一次。

但是,如果要将它们转储到列表或其他内容中,则可以执行

stream.forEach((x) -> ((x == 0) ? heads : tails).add(x));
2020-09-09