小编典典

你能把一个流分成两个流吗?

all

我有一个由 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]

感谢您的任何见解。


阅读 61

收藏
2022-07-30

共1个答案

小编典典

不完全是。你不能Stream从一个中得到两个;这没有任何意义——你将如何迭代一个而不需要同时生成另一个?一个流只能被操作一次。

但是,如果您想将它们转储到列表或其他内容中,您可以这样做

stream.forEach((x) -> ((x == 0) ? heads : tails).add(x));
2022-07-30