1. ホーム
  2. java

[解決済み] Java 8のmap()メソッドとflatMap()メソッドの違いは何ですか?

2022-03-23 23:31:41

質問

Java 8では、以下の違いは何ですか? Stream.map() Stream.flatMap() メソッドですか?

解決方法は?

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

これは各オペレーションの引数に反映されている。

map 演算は Function 入力ストリームの各値に対して呼び出され、1つの結果値を生成し、それは出力ストリームに送られる。

flatMap 演算は、概念的には1つの値を消費して任意の数の値を生成したい関数を取ります。しかし、Javaでは、メソッドは0か1つの値しか返せないので、任意の数の値を返すことは面倒です。のマッパー関数が、任意の数の値を返すようなAPIを想像することができる。 flatMap を受け取り、配列を返すか List の値が出力に送られます。これがストリーム・ライブラリであることを考えると、任意の数の戻り値を表現する特に適切な方法は、マッパー関数自体がストリームを返すことです! マッパーが返すストリームの値は、ストリームから排出され、出力ストリームに 渡される。マッパー関数の各呼び出しによって返される値の塊は、出力ストリームでは全く区別されないので、出力はquot;flattened."と言われる。

典型的な使い方は、マッパー関数が flatMap を返すように Stream.empty() のように、ゼロ値を送信したい場合は、次のようにします。 Stream.of(a, b, c) は、いくつかの値を返したい場合。しかし、もちろんどんなストリームでも返すことができる。