の ストリーム API が導入されました Java 8 オブジェクトのコレクションを処理するために使用されます。をインポートすることで使用できます。 java.util.stream パッケージ。このセクションでは、 Stream. flatMap() ストリーム API のメソッド。また、 Java 8 の Stream. flatMap() メソッドと Stream.map() メソッドの主な違い。
変更して列を追加します。
本題に移る前に、まず、 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() メソッドは変換に役立つと言えます。 ストリーム
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('Colombia', 'Finland', 'Greece', 'Iceland', 'Liberia', 'Mali', 'Mauritius'), Arrays.asList('Peru', 'Serbia', 'Singapore', 'Turkey', 'Uzbekistan', 'Yemen', 'Zimbabwe', 'Greece', 'Iceland')).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('Printer', 'Mouse', 'Keyboard', 'Motherboard'); List productlist2 = Arrays.asList('Scanner', 'Projector', 'Light Pen'); List productlist3 = Arrays.asList('Pen Drive', 'Charger', 'WIFI Adapter', 'Cooling Fan'); List productlist4 = Arrays.asList('CPU Cabinet', 'WebCam', 'USB Light', 'Microphone', 'Power cable'); 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('List Before Applying mapping and Flattening: '); //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 -> pList.stream()).collect(Collectors.toList()); System.out.println('List After Applying Mapping and Flattening Operation: '); //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() の主な違いを説明します。
Stream. flatMap() | Stream.map() |
---|---|
ストリームの値のストリームを処理します。 | 値のストリームを処理します。 |
フラット化とともにマッピングを実行します。 | マッピングのみを実行します。 |
ストリームからのデータを変換します | データをストリームからストリームに変換します。 |
1 対多のマッピングを使用します。 | One-to-One マッピングを使用します。 |
マッパー関数は、入力値ごとに複数の値 (値のストリーム) を生成します。 | そのマッパー関数は、入力値ごとに単一の値を生成します。 |
マッパー関数が入力値ごとに複数の値を生成する場合は、 flatMap() メソッドを使用します。 | マッパー関数が入力値ごとに単一の値を生成する場合は、map() メソッドを使用します。 |