java8 stream 的 flatmap 跟map有啥区别?有例子不
欢迎选择我的课程,让我们一起见证您的进步~~
フラットマップはラムダでコレクションを返し、その後、個々の要素を最終結果セットに 1 つずつフラットに配置できます。 たとえば、Personal に複数の趣味 (List<Hobby>) がある場合、全員の趣味をすべて取得したい場合は、次のようにすることができます。 Set<Hobby> HobbySet = people.ParallelStream(). flatMap(p -> p.getHobbyList.stream()).collect(Collectors.toCollection(() -> new TreeSet<Hobby>( (h1,h2 ) -> h1.getName().compareTo(h2.getName()))))
たとえば、List<?>、マップはリスト内の各オブジェクトを直接操作できます
フラットマップを使用すると、次のように、より深いレベルのデータを操作できるようになります: List<List<?>>
マップ: 指定された変換関数を使用して、ストリームに含まれる要素に対して変換操作を実行します。新しく生成されたストリームには、変換によって生成された要素のみが含まれます。このメソッドには、プリミティブ型の 3 つのバリアント メソッド (mapToInt、mapToLong、mapToDouble) があります。これら 3 つのメソッドも比較的理解しやすいものです。たとえば、mapToInt は元の Stream を新しい Stream に変換します。この新しく生成された Stream の要素はすべて int 型です。 3 つの変形方法がある理由は、自動ボックス化/ボックス化解除の追加消費を避けるためです。
flatMap メソッドの図:
フラットマップはラムダでコレクションを返し、その後、個々の要素を最終結果セットに 1 つずつフラットに配置できます。
たとえば、Personal に複数の趣味 (List<Hobby>) がある場合、全員の趣味をすべて取得したい場合は、次のようにすることができます。 Set<Hobby> HobbySet = people.ParallelStream(). flatMap(p -> p.getHobbyList.stream())
.collect(Collectors.toCollection(() -> new TreeSet<Hobby>(
(h1,h2 ) -> h1.getName().compareTo(h2.getName())
)))
たとえば、List<?>、マップはリスト内の各オブジェクトを直接操作できます
リーリーフラットマップを使用すると、次のように、より深いレベルのデータを操作できるようになります:
リーリーList<List<?>>
マップ: 指定された変換関数を使用して、ストリームに含まれる要素に対して変換操作を実行します。新しく生成されたストリームには、変換によって生成された要素のみが含まれます。このメソッドには、プリミティブ型の 3 つのバリアント メソッド (mapToInt、mapToLong、mapToDouble) があります。これら 3 つのメソッドも比較的理解しやすいものです。たとえば、mapToInt は元の Stream を新しい Stream に変換します。この新しく生成された Stream の要素はすべて int 型です。 3 つの変形方法がある理由は、自動ボックス化/ボックス化解除の追加消費を避けるためです。
マップメソッドの図:
flatMap: マップと似ていますが、各要素が Stream オブジェクトに変換され、子 Stream の要素が親コレクションに圧縮される点が異なります。flatMap メソッドの図: