logo

Java 8 の flatMap() メソッド

ストリーム API が導入されました Java 8 オブジェクトのコレクションを処理するために使用されます。をインポートすることで使用できます。 java.util.stream パッケージ。このセクションでは、 Stream. flatMap() ストリーム API のメソッド。また、 Java 8 の Stream. flatMap() メソッドと Stream.map() メソッドの主な違い。

変更して列を追加します。
Java 8 の flatMap() メソッド

本題に移る前に、まず、 Stream.map() 方法。なぜなら flatMap() 方法はに基づいています 地図() 方法。

Java Stream.map() メソッド

Stream.map() メソッドは、マッパー関数を使用して中間操作を実行します。要素ごとに新しいストリームが生成されます。すべてのストリームを 1 つのストリームに変換して結果を提供します。したがって、ストリームの各要素は新しいストリームに変換されます。

構文:

 Stream map(Function mapper) 

R: これは、新しいストリームの要素の型を表す型パラメーターです。

マッパー: これは、各要素に適用される非干渉のステートレス関数であるパラメーターです。

map() メソッドの例

 List citylist = Arrays.asList('delhi', 'mumbai', 'hyderabad', 'ahmedabad', 'indore', 'patna'). stream(). map(String::toUpperCase).collect(Collectors.toList()); 

のマップについて上記のステートメントを考えてみましょう。 ストリーム 。 map() を使用して結果のストリームを作成します。各反復で、map() はマッパー関数を実行することにより、結果を含む個別のストリームを作成します。最後に、map() はすべてのストリームを 1 つのストリームに変換します。

MapExample.java

 import java.util.*; public class MapExample { public static void main(String args[]) { System.out.println('Stream After applying the map() function: '); //creats a list of integers List list = Arrays.asList(12, 45, 67, 19, 87, 2, 9); //creating a new stream of the elements an prints the same using the foreach loop list.stream().map(number -> number * 2).forEach(System.out::println); } } 

出力:

 Stream After applying the map() function: 24 90 134 38 174 4 18 

Java Stream. flatMap() メソッド

ジャワ 8 ストリーム、 flatMap() メソッドはマッパー関数として操作を適用し、要素値のストリームを提供します。これは、各要素の各反復で、map() メソッドが個別の新しいストリームを作成することを意味します。平坦化メカニズムを使用することにより、すべてのストリームが単一の結果ストリームにマージされます。つまり、ストリームのストリームを値のリストに変換するために使用されます。

構文:

 Stream flatMap(Function<? super T,? extends Stream> mapper) 

このメソッドは関数を引数として受け取ります。 T をパラメータとして受け取り、R のストリームを返します。

R: これは、新しいストリームの要素の型を表す型パラメーターです。

マッパー: これは、各要素に適用される非干渉のステートレス関数であるパラメーターです。それは新しい価値の流れを生み出します。

つまり、 flatMap() メソッドは変換に役立つと言えます。 ストリームストリーム 。実行します 平らにする (平らにするか平らにする) そして マッピング (地図)、同時に。 Stream. flatMap() メソッドは、フラットとマップの両方の操作を組み合わせます。

 flatMap() = Flattening (flat)+ mapping (map) 

フラット化の意味を理解しましょう。

平坦化とは何ですか?

平坦化 複数のリストのリストを変換し、それらすべてのリストをマージして、すべてのリストのすべての要素を含む 1 つのリストを作成するプロセスです。

ラテックスのフォントサイズ

平坦化の例

次のリストのリストを考えてみましょう。

平らにする前: [[1、2、3、4]、[7、8、9、0]、[5、6]、[12、18、19、20、17]、[22]]

平坦化後: [1、2、3、4、7、8、9、0、5、6、12、18、19、20、17、22]

flatMap() メソッドの例

 List country = Stream.of(Arrays.asList(&apos;Colombia&apos;, &apos;Finland&apos;, &apos;Greece&apos;, &apos;Iceland&apos;, &apos;Liberia&apos;, &apos;Mali&apos;, &apos;Mauritius&apos;), Arrays.asList(&apos;Peru&apos;, &apos;Serbia&apos;, &apos;Singapore&apos;, &apos;Turkey&apos;, &apos;Uzbekistan&apos;, &apos;Yemen&apos;, &apos;Zimbabwe&apos;, &apos;Greece&apos;, &apos;Iceland&apos;)).flatMap(List::stream) .collect(Collectors.toList()); 

マッパー関数 List::stream を使用して、ストリーム上で flatMap() メソッドを使用できます。ストリーム終端操作を実行すると、 flatMap() の各要素が個別のストリームを提供します。最終フェーズでは、 flatMap() メソッドがすべてのストリームを新しいストリームに変換します。上記のストリームでは、重複した値が含まれていないことがわかります。

Java プログラムを作成し、 flatMap() メソッドを使用してみましょう。

FlatMapExample.java

 import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class FlatmapExample { public static void main(String args[]) { //creating ArrayList List productlist1 = Arrays.asList(&apos;Printer&apos;, &apos;Mouse&apos;, &apos;Keyboard&apos;, &apos;Motherboard&apos;); List productlist2 = Arrays.asList(&apos;Scanner&apos;, &apos;Projector&apos;, &apos;Light Pen&apos;); List productlist3 = Arrays.asList(&apos;Pen Drive&apos;, &apos;Charger&apos;, &apos;WIFI Adapter&apos;, &apos;Cooling Fan&apos;); List productlist4 = Arrays.asList(&apos;CPU Cabinet&apos;, &apos;WebCam&apos;, &apos;USB Light&apos;, &apos;Microphone&apos;, &apos;Power cable&apos;); List<list> allproducts = new ArrayList<list>(); //adding elements to the list allproducts.add(productlist1); allproducts.add(productlist2); allproducts.add(productlist3); allproducts.add(productlist4); //creating a list of all products List listOfAllProducts = new ArrayList(); //for each loop iterates over the list for(List pro : allproducts) { for(String product : pro) { //adds all products to the list listOfAllProducts.add(product); } } System.out.println(&apos;List Before Applying mapping and Flattening: 
&apos;); //prints stream before applying the flatMap() method System.out.println(listOfAllProducts); System.out.println(); //creats a stream of elemnts using flatMap() List flatMapList = allproducts .stream().flatMap(pList -&gt; pList.stream()).collect(Collectors.toList()); System.out.println(&apos;List After Applying Mapping and Flattening Operation: 
&apos;); //prints the new stream that we get after applying mapping and flattening System.out.println(flatMapList); } } </list></list>

出力:

vlcでYouTubeビデオをダウンロード
 List Before Applying mapping and Flattening: [Printer, Mouse, Keyboard, Motherboard, Scanner, Projector, Lighten, Pen Drive, Charger, WIFI Adapter, Cooling Fan, CPU Cabinet, WebCam, USB Light, Microphone] List After Applying Mapping and Flattening Operation: [Printer, Mouse, Keyboard, Motherboard, Scanner, Projector, Light Pen, Pen Drive, Charger, WIFI Adapter, Cooling Fan, CPU Cabinet, WebCam, USB Light, Microphone] 

これで、Stream クラスの両方のメソッドを理解できました。それらの間の重要な違いを簡単に指摘できるからです。

Stream. flatMap() とStream.map()

次の表では、Stream. flatMap() と Stream.map() の主な違いを説明します。

Java 8 の flatMap() メソッド
Stream. flatMap() Stream.map()
ストリームの値のストリームを処理します。 値のストリームを処理します。
フラット化とともにマッピングを実行します。 マッピングのみを実行します。
ストリームからのデータを変換しますストリームへ。 データをストリームからストリームに変換します。
1 対多のマッピングを使用します。 One-to-One マッピングを使用します。
マッパー関数は、入力値ごとに複数の値 (値のストリーム) を生成します。 そのマッパー関数は、入力値ごとに単一の値を生成します。
マッパー関数が入力値ごとに複数の値を生成する場合は、 flatMap() メソッドを使用します。 マッパー関数が入力値ごとに単一の値を生成する場合は、map() メソッドを使用します。