Java での flatMap() のストリームと例

ストリーム flatMap(関数マッパー) このストリームの各要素を、提供されたマッピング関数を各要素に適用することによって生成されたマップされたストリームの内容で置き換えた結果で構成されるストリームを返します。ストリーム flatMap(関数マッパー) は、 中間操作 。これらの操作は常に遅延的です。中間操作は Stream インスタンスで呼び出され、処理が完了すると、Stream インスタンスが出力として返されます。

注記 : マップされた各ストリームは、そのコンテンツがこのストリームに配置された後に閉じられます。マップされたストリームが null の場合、代わりに空のストリームが使用されます。

flatMap() V/秒 地図() :
1) 地図() ストリームを受け取り、それを別のストリームに変換します。 Stream の各要素に関数を適用し、戻り値を新しい Stream に格納します。ストリームを平らにすることはありません。ただし、 flatMap() はマップとフラット操作を組み合わせたものです。つまり、要素に関数を適用し、要素をフラット化します。
2) 地図() は変換のみに使用されますが、 flatMap() は変換と平坦化の両方に使用されます。

構文:

  < R>ストリーム < R>flatMap(関数 < ? super T, ? extends Stream < ? extends R>> マッパー) ここで、R は新しいストリームの要素タイプです。 Stream はインターフェイス、T はストリーム要素のタイプです。マッパーは各要素に適用されるステートレス関数であり、関数は新しいストリームを返します。> 

例 1: flatMap() 関数と提供されたマッピング関数。




// Java code for Stream flatMap> // (Function mapper) to get a stream by> // replacing the stream with a mapped> // stream by applying the provided mapping function.> import> java.util.*;> import> java.util.stream.Stream;> > class> GFG {> > > // Driver code> > public> static> void> main(String[] args)> > {> > > // Creating a List of Strings> > List list = Arrays.asList(> '5.6'> ,> '7.4'> ,> '4'> ,> > '1'> ,> '2.3'> );> > > // Using Stream flatMap(Function mapper)> > list.stream().flatMap(num ->Stream.of(num))。>> > forEach(System.out::println);> > }> }>

出力:

 5.6 7.4 4 1 2.3 

例 2: flatMap() 関数。位置 2 の文字と文字列をマッピングする操作が提供されます。




// Java code for Stream flatMap> // (Function mapper) to get a stream by> // replacing the stream with a mapped> // stream by applying the provided mapping function.> import> java.util.*;> import> java.util.stream.Stream;> > class> GFG {> > > // Driver code> > public> static> void> main(String[] args)> > {> > > // Creating a List of Strings> > List list = Arrays.asList(> 'Geeks'> ,> 'GFG'> ,> > 'techcodeview.com'> ,> 'gfg'> );> > > // Using Stream flatMap(Function mapper)> > list.stream().flatMap(str ->>> > Stream.of(str.charAt(> 2> ))).> > forEach(System.out::println);> > }> }>

出力:

 e G e g 

flatMap() はどのように機能するのでしょうか?

この投稿ですでに説明したように、 flatMap() はマップとフラット操作の組み合わせです。つまり、最初にマップ関数を適用し、次に結果をフラット化します。ストリームの平坦化とは正確に何なのかを理解するために、いくつかの例を考えてみましょう。
例 1:
フラット化前のリスト:

 [ [2, 3, 5], [7, 11, 13], [17, 19, 23] ] 

リストには 2 つのレベルがあり、3 つの小さなリストで構成されます。フラット化後、次のように 1 レベルの構造に変換されます。

 [ 2, 3, 5, 7, 11, 13, 17, 19, 23 ] 

例 2:
フラット化前のリスト:

 [ ['G', 'E', 'E'], ['K', 'S', 'F'], ['O', 'R', 'G'], ['E', 'E', 'K', 'S'] ] 

リストには 3 つのレベルがあり、4 つの小さなリストで構成されます。フラット化後、次のように 1 レベルの構造に変換されます。

 ['G', 'E', 'E', 'K', 'S', 'F', 'O', 'R', 'G', 'E', 'E', 'K', 'S'] 

要するに、次のことが言えます。 < < のリストのストリーム データ・タイプ >> 平坦化する前、次に flatMap() を適用するとき、 < < のストリーム データ・タイプ >> 平らにして返します。
応用 :




// Java code for Stream flatMap(Function mapper)> import> java.util.*;> import> java.util.stream.Collectors;> > class> GFG> {> > // Driver code> > public> static> void> main(String[] args)> > {> > // Creating a list of Prime Numbers> > List PrimeNumbers = Arrays.asList(> 5> ,> 7> ,> 11> ,> 13> );> > > // Creating a list of Odd Numbers> > List OddNumbers = Arrays.asList(> 1> ,> 3> ,> 5> );> > > // Creating a list of Even Numbers> > List EvenNumbers = Arrays.asList(> 2> ,> 4> ,> 6> ,> 8> );> > > List listOfListofInts => > Arrays.asList(PrimeNumbers, OddNumbers, EvenNumbers);> > > System.out.println(> 'The Structure before flattening is : '> +> > listOfListofInts);> > > // Using flatMap for transformating and flattening.> > List listofInts = listOfListofInts.stream()> > .flatMap(list ->list.stream())>> > .collect(Collectors.toList());> > > System.out.println(> 'The Structure after flattening is : '> +> > listofInts);> > }> }>

出力:

 The Structure before flattening is : [[5, 7, 11, 13], [1, 3, 5], [2, 4, 6, 8]] The Structure after flattening is : [5, 7, 11, 13, 1, 3, 5, 2, 4, 6, 8]