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 属性を使用する必要があります。これで、非常に単純なストリーミング操作を通じてこの要件が完了しました。
回路図:
対応する疑似コード:
// 伪代码 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 つのストリームにマージします。 「砂を集めて塔を作っている」感覚があります。
4. 理解を深めるために別の図を描きます:
以上がJava8 Stream APIでのマップおよびフラットマップ操作の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。