Boolean.FALSE
のストリーム、たとえば100の長さを作成するにはどうすればよいですか?ブールのストリームを生成する
私は何をして苦労してきたことである:
- は、もともと私は
Boolean.FALSE
の配列を作成することを目的としました。しかしnew Boolean[100]
はNULL
の配列を返します。私はストリームAPIを便利なIterable
とほとんど(1)Iterable
操作ツールとして使用することを合理的に考えました。 - 何
Boolean
は、それがSupplier<T>
(3)を受け入れるため、それゆえ私は は、Stream.generate()
を使用することはできません、無のparamsコンストラクタ(2)はありません。
私が見つけたのはStream.iterate(Boolean.FALSE, bool -> Boolean.FALSE).limit(100);
ですが、私が望むものを与えてくれますが、それはかなり上品な解決策ではありません。
もう1つのオプション、私は(4)がIntStream.range(0, 100).mapToObj(idx -> Boolean.FALSE);
であることを発見しました。これはさらに奇妙に思えます。
これらのオプションはストリームAPIのパイプライン構想に違反しませんが、Boolean.FALSE
のストリームを作成するための簡潔な方法はありますか?それは関係なく、必要な大きさの、Stream.generate().limit()
ソリューションに比べてより多くのストレージを必要としないので、nCopies
によって返さList
がtiny (it contains a single reference to the data object).
であることを
Collections.nCopies (100, Boolean.FALSE).stream()...
注:
なぜあなたは 'Stream.generate()'を使用できないと思いますか?これを試してみましょう: 'Stream.generate(Boolean).Flse).limit(100)' – Jesper
私はそのようなストリームに妥当なユースケースを想像することはできません。ステートレス関数のみを使用する(つまり処理順序に依存しない)推奨される方法に従うと、結果は常に100個の同一要素のストリームまたは空のストリームになります。最終結果がどんなものであろうと、代わりに単一の要素ストリームから生成することは常に可能です。 – Holger
@Holger無向グラフのサイクルを検出します。ステップの1つは、平行エッジの検出です。私は、並列性を検出するために私が訪れたすべての頂点に印をつけます。したがって、各頂点は「訪問されました」という配列に一致します。反復が完了した後、「訪問されました」の配列をリセットする必要があります。そして、私はそのようなストリームを再生させます。私はこの目的のために0と1の配列を使うことができましたが、わかりやすくするために私が使ったものを使うことに決めました。 –