ホームページ  >  記事  >  Java  >  Java8 Stream APIでのマップおよびフラットマップ操作の詳細な説明

Java8 Stream APIでのマップおよびフラットマップ操作の詳細な説明

青灯夜游
青灯夜游転載
2019-11-27 17:50:384309ブラウズ

Java8 Stream APIでのマップおよびフラットマップ操作の詳細な説明

1. はじめに

Java 8 は非常に使いやすいストリームを提供しますAPI: コレクションは簡単に操作できます。今日は、2 つの Stream 中間操作 map(Function super T, ? extends R> mapper) flatMap(Function super T, ? extends Stream> マッパー)

[推奨学習: Java ビデオ チュートリアル]

2. マップ操作

map この操作は、ストリーム内の要素を再度処理して新しいストリームを形成することです。これは開発に役立ちます。たとえば、学生のコレクションがあるとします。学生の年齢分布曲線を分析するには、そこから学生の年齢を抽出する必要があります。
Place before Java 8 新しいコレクションを作成し、student コレクションを走査して要素内の age 属性を使用する必要があります。これで、非常に単純なストリーミング操作を通じてこの要件が完了しました。

回路図:

Java8 Stream APIでのマップおよびフラットマップ操作の詳細な説明

対応する疑似コード:

 // 伪代码
 List<integer> ages=studentList.stream().map(Student::getAge).collect(Collectors.toList());</integer>

3. flatMap 操作

上記の例を通して、map 操作は非常に簡単に理解できるはずです。では、 flatMap は何をするのでしょうか?このように、上記の例を変形して、クラス単位の場合は、全クラスの生徒全員の年齢を抽出して、生徒の年齢分布曲線を分析します。現時点でも上記の方法を使用することは可能でしょうか?

 List<list>> studentGroup= gradeList.stream().map(Grade::getStudents).collect(Collectors.toList());</list>

上記の操作により、各クラスの Student コレクションのコレクション List<list>></list> のみを取得できます。生徒の年齢データを取得するには入れ子になったループも必要ですが、これは非常に不便です。すべての学生のコレクション List<students></students> を返すことができれば、さらに便利になります。それは正しい! フラットマップ それはできる!

 // flatMap 提取 List<students>  map 提取年龄
 List<integer> ages = grades.stream().flatMap(grade -> grade.getStudents().stream()).map(Student::getAge).collect(Collectors.toList());</integer></students>

上の疑似コードに示すように、 flatMap を使用してすべての生徒を集めます。次に、map 操作を使用して年齢を抽出します。 flatMap は、map が属性のみを抽出してストリームに入れるのに対し、 flatMap は最初に属性を抽出して小さなストリームに入れるという点で map と異なります。次に、すべてのストリームを 1 つのストリームにマージします。 「砂を集めて塔を作っている」感覚があります。

Java8 Stream APIでのマップおよびフラットマップ操作の詳細な説明

4. 理解を深めるために別の図を描きます:

4. まとめ

## 一度####map### 操作と ### flatMap### 操作に精通していれば、データ フロー操作の問題の一部を非常に簡単に解決できます。さらに知識を深めていただくと、実際、Java 8 では、これら 2 つの操作が Stream だけでなく ###Optional### にも存在し、それらの機能は似ています。 ######この記事は ###Java 入門 ### 列からのものです。ぜひ学習してください。 ###

以上がJava8 Stream APIでのマップおよびフラットマップ操作の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。