Java 8 の map() メソッドと flatMap() メソッドの違いは何ですか? 質問する

Java 8 の map() メソッドと flatMap() メソッドの違いは何ですか? 質問する

Java 8では、Stream.map()そしてStream.flatMap()方法は?

ベストアンサー1

mapは両方ともflatMapa に適用できStream<T>、どちらも a を返しますStream<R>。違いは、map演算は入力値ごとに 1 つの出力値を生成するのに対し、flatMap演算は入力値ごとに任意の数 (0 個以上) の値を生成することです。

これは各操作の引数に反映されます。

このmap操作は を受け取りますFunction。これは入力ストリーム内の各値に対して呼び出され、出力ストリームに送信される 1 つの結果値を生成し、

このflatMap操作は、概念的には 1 つの値を消費して任意の数の値を生成する関数を取ります。ただし、Java では、メソッドが 0 または 1 つの値しか返せないため、メソッドが任意の数の値を返すのは面倒です。マッパー関数がflatMap値を受け取り、値の配列または を返しList、それが出力に送信される API を想像できます。これがストリーム ライブラリであることを考えると、任意の数の戻り値を表すのに特に適した方法は、マッパー関数自体がストリームを返すことです。マッパーによって返されるストリームの値は、ストリームから排出され、出力ストリームに渡されます。マッパー関数への各呼び出しによって返される値の「塊」は、出力ストリームではまったく区別されないため、出力は「平坦化」されていると言われます。

典型的な使用法は、ゼロ値を送信する場合や、複数の値を返す場合などに、マッパー関数flatMapが を返すことです。ただし、もちろん任意のストリームを返すことができます。Stream.empty()Stream.of(a, b, c)

おすすめ記事