1. ホーム
  2. java

[解決済み] Java 8のSpliterator、Collector、Streamを理解する

2022-05-04 14:33:37

質問

を理解するのに苦労しています。 Stream インターフェイス、特にそれが Spliterator Collector のインターフェイスになります。私の問題は、単に SpliteratorCollector のインタフェースがまだ存在せず、その結果 Stream のインターフェースは、私にとってはまだよくわからないものです。

とは一体何なのでしょうか? SpliteratorCollector また、どのように使用すればよいのでしょうか?もし、私が自分で Spliterator または Collector (そして、おそらく私自身の Stream その中で、何をすべきで、何をすべきでないか?

ウェブに散らばっている例をいくつか読みましたが、ここでのすべてがまだ新しく、変更される可能性があるため、例やチュートリアルはまだ非常にまばらです。

どのように解決するのですか?

を扱うことはほぼないはずです。 Spliterator を書くときだけ必要です。 Collection の型を自分で作成し また を使用して、並列化された操作を最適化することを意図しています。

参考までに Spliterator は、コレクションの一部を簡単に分割して操作する方法です。例えば、並列化していて、あるスレッドがコレクションのある部分を操作し、あるスレッドが別の部分を操作する、といったような場合です。

の値を保存することは基本的にありません。 Stream を変数に追加することもできます。 Stream は、ある種の Iterator これは、Javadocの例のように、フルエントチェーンでほとんど常に使用される一回限りのオブジェクトということです。

int sum = widgets.stream()
                  .filter(w -> w.getColor() == RED)
                  .mapToInt(w -> w.getWeight())
                  .sum();

Collector は、map/reduce のような "reduce" 操作の最も一般的で抽象的なバージョンです。特に、並列化および最終化ステップをサポートする必要があります。 例 Collector のようなものがあります。

  • の合計、例えば Collectors.reducing(0, (x, y) -> x + y)
  • StringBuilderによる追加、例. Collector.of(StringBuilder::new, StringBuilder::append, StringBuilder::append, StringBuilder::toString)