1. ホーム
  2. java

[解決済み] 1つのストリームを2つに分けることはできますか?

2022-04-22 06:15:28

質問

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));

また、このストリームを縮小して、例えば、データセットのランダムな半分を表す2つのリストを取得し、それらをストリームに戻す方法もありますね。 しかし、最初のストリームから2つのストリームを生成する直接的な方法はないのでしょうか?例えば

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

ご意見をお聞かせください。

解決方法は?

正確には、そうではありません。 あなたは、2つの Stream 同時にもう一方を生成する必要なしに、どうやって一方を反復処理するのでしょうか? ストリームは一度しか操作できないのです。

ただし、リストに捨てたりする場合は、以下のようになります。

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