1. ホーム
  2. java

[解決済み] Java 8におけるfindAny()とfindFirst()の相違点

2022-11-02 11:50:16

質問

私は Stream#findAny()Stream#findFirst()Stream のAPIをJava 8に追加しました。

私が理解したのは、例えばfilterと組み合わせて使用した場合、どちらもストリームから最初にマッチした要素を返すということでしょうか。

では、なぜ同じタスクに2つのメソッドがあるのでしょうか?私は何かを見逃しているのでしょうか?

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

<ブロッククオート

私が理解したのは、どちらもストリームから最初にマッチした要素を返すということです。 をストリームから返すということだと理解していますが、例えば、filterと併用する場合はどうでしょうか?

そんなことはありません。javadocによると Stream#findAny() :

を返します。 Optional<T> を記述した いくつかの の要素、またはストリームの空の Optional<T> である。 この操作の動作は明示的に非決定的である。 はストリーム中の任意の要素を自由に選択することができます。 これは、並列処理で最大のパフォーマンスを発揮できるようにするためです。

一方 Stream.findFirst() Optional<T> を記述する 厳密には はストリームの最初の要素です。また Stream クラスには .findOne() メソッドを持たないので、おそらく .findFirst() .