1. Введение
Java 8дает очень полезныйStream API, вы можете легко управлять коллекцией. Сегодня мы поговорим о двухStreamПромежуточная операцияmap(Function mapper)
иflatMap(Function> mapper)
2. операция карты
map
Операция заключается в перераспределении элементов обработки для формирования нового потока. Это полезно в развитии. Например, у нас есть набор студентов, нам нужно извлечь из анализа возрастного профиля учащегося возраст учащихся. ставитьJava 8Раньше мы собирались использовать атрибут возраста в элементе, создавая новую коллекцию, а затем перебирая коллекцию студентов. Теперь мы выполнили это требование с помощью очень простой потоковой операции.
Схема:
Соответствующий псевдокод:
// 伪代码
List<Integer> ages=studentList.stream().map(Student::getAge).collect(Collectors.toList());
3. операция плоской карты
В приведенном выше примереmap
Операция должна быть очень хорошо понята. ТакflatMap
Почему это? Таким образом, мы должны изменить приведенный выше пример, если класс как единица состоит в том, чтобы извлечь всех учащихся во всех классах, чтобы проанализировать возраст возрастного профиля учащихся. Тогда мы используем вышеуказанный метод, все еще работающий?
List<List<Student>> studentGroup= gradeList.stream().map(Grade::getStudents).collect(Collectors.toList());
С помощью вышеуказанной операции мы можем получить только набор учеников в каждом классе.List>
. Также нам нужны вложенные циклы для получения данных о возрасте учеников, что очень неудобно. Если бы мы могли вернуть множество всех студентовList
Это намного удобнее. Верно!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, но и фактическиOptional
Есть также два вида операций, и эффект похож.
关注公众号:Felordcn获取更多资讯