温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

map和flatMap怎么在Java8项目中使用

发布时间:2021-03-02 15:14:03 来源:亿速云 阅读:330 作者:戴恩恩 栏目:编程语言

本文章向大家介绍map和flatMap怎么在Java8项目中使用,主要包括map和flatMap怎么在Java8项目中使用的使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Java可以用来干什么

Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页开发;5. 企业级应用开发;6. Java大数据开发;7.游戏开发等。

1.前言

Java 8提供了非常好用的 Stream API ,可以很方便的操作集合。今天我们来探讨两个 Stream 中间操作 map(Function<? super T, ? extends R> mapper)flatMap(Function<? super T, ? extends Stream<? extends R>> mapper)

2. map 操作

map 操作是将流中的元素进行再次加工形成一个新流。这在开发中很有用。比如我们有一个学生集合,我们需要从中提取学生的年龄以分析学生的年龄分布曲线。

放在 Java 8 之前 我们要通过新建一个集合然后通过遍历学生集合来消费元素中的年龄属性。现在我们通过很简单的流式操作就完成了这个需求。

示意图:

map和flatMap怎么在Java8项目中使用

对应的伪代码:

// 伪代码
 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 先提取属性放入一个比较小的流,然后再将所有的流合并为一个流。有一种 “聚沙成塔” 的感觉。

再画一张图来加深理解:

map和flatMap怎么在Java8项目中使用

到此这篇关于map和flatMap怎么在Java8项目中使用的文章就介绍到这了,更多相关的内容请搜索亿速云以前的文章或继续浏览下面的相关文章希望大家以后多多支持亿速云!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI