Java 8 Stream AppのmapとflatMapの操作方法

1.はじめに
Java 8は、非常に有用なStream APIを提供しています。今日は2つのStreamの中間動作
map(Function<? super T, ? extends R> mapper)
とflatMap(Function<? super T, ? extends Stream<? extends R>> mapper)
について検討します。2.map操作
map
は、ストリーム中の要素を再加工して新たなストリームを形成するように動作する。これは開発に役立つ。例えば、学生の集まりがあります。学生の年齢を抽出して、学生の年齢分布曲線を分析したいです。Java 8に置く前に、新しい集合を通して学生の集合を通して元素の年齢属性を消費します。今は簡単なフロー操作でこの需要を完成しました。
見取り図:

対応する疑似コード:
//
List<Integer> ages=studentList.stream().map(Student::getAge).collect(Collectors.toList());
3.flatMap操作上記の例により、
map
は非常によく動作するはずです。flatMap
は何ですか?このように、上の例を変えてみます。クラス単位で、すべてのクラスの学生の年齢を抽出して、学生の年齢分布曲線を分析します。この時は上の方法を使っても大丈夫ですか?
List<List<Student>> studentGroup= gradeList.stream().map(Grade::getStudents).collect(Collectors.toList());
上記の操作によって、各クラスの学生集合List<List<Student>>
を得ることができます。私たちは入れ子循環が必要です。学生の年齢データを得るにはとても不便です。全学生の集合List<Students>
に戻れると便利です。そうですflatMap
ができます。
// flatMap List<Students> map
List<Integer> ages = grades.stream().flatMap(grade -> grade.getStudents().stream()).map(Student::getAge).collect(Collectors.toList());
上の疑似コードに示されているように、私たちはflatMap
を使ってすべての学生を集めます。次に、年齢抽出動作をmap
を使用する。flatMap
は、map
とは異なる。map
は抽出された属性をストリームに入れるだけであり、flatMapは最初に属性を抽出して比較的小さなストリームに入れてから、すべてのストリームを一つのストリームに統合する。「集まった砂が塔になる」という感じがします。もう一枚の絵を描いて理解を深めます。

4.まとめ
map
操作とflatMap
操作は、慣れたら、いくつかのデータストリームの動作問題を簡単に解決することができます。知識を広げると、Java 8にはStreamだけでなく、この2つの操作があります。実はOptional<T>
にもこの2つの操作があります。以上は小编が绍介したJava 8 Stream Appの中のmapとflatMapの操作方法です。皆さんに助けてほしいです。もし何か疑问があれば、メッセージをください。小编はすぐに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。
本文があなたのためになると思ったら、転載を歓迎します。出所を明記してください。ありがとうございます。