1.前言

Java 8 提供了非常好用的 Stream API ,可以很方便的操作集合。今天我们来探讨两个 Stream 中间操作 map 和 flatMap

2. map 操作

map 操作是将流中的元素进行再次加工形成一个新流。这在开发中很有用。比如我们有一个学生集合,我们需要从中提取学生的年龄以分析学生的年龄分布曲线。放在 Java 8 之前 我们要通过新建一个集合然后通过遍历学生集合来消费元素中的年龄属性。现在我们通过很简单的流式操作就完成了这个需求。

示意图:

对应的伪代码:

// 伪代码

List ages=studentList.stream().map(Student::getAge).collect(Collectors.toList());

3. flatMap 操作

通过上面的例子,map 操作应该非常好理解。那么 flatMap 是干嘛的呢? 这样我们把上面的例子给改一下,如果是以班级为单位,提取所有班级下的所有学生的年龄以分析学生的年龄分布曲线。这时我们使用上面的方法还行得通吗?

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

通过上面的一顿操作,我们只能得到每个班的学生集合的集合 List>。 我们还需要嵌套循环才能获取学生的年龄数据,十分不便。如果我们能返回全部学生的集合就方便多了。 没错!flatMap 可以搞定!

// flatMap 提取 List map 提取年龄

List 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 获取更多干货

java8 stream to map_Java 8 Stream Api 中的 map和 flatMap 操作相关推荐

  1. Java 8 Stream Api 中的 map和 flatMap 操作

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「码农小胖哥」 1.前言 Java 8  ...

  2. Java 8 Stream Api 中的 skip 和 limit 操作

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 Java 8 Stream API 中的sk ...

  3. java8中的map与flatmap区别

    map:只能返回一个值 flatmap:返回多个值 new ArrayList().stream().map(x -> x);//返回一个 new ArrayList().stream().fl ...

  4. 谈谈 Swift 中的 map 和 flatMap

    map 和 flatMap 是 Swift 中两个常用的函数,它们体现了 Swift 中很多的特性.对于简单的使用来说,它们的接口并不复杂,但它们内部的机制还是非常值得研究的,能够帮助我们够好的理解 ...

  5. RxJava 中的map与flatMap

    1.map和flatMap都是接受一个函数作为参数(Func1) 2.map函数只有一个参数,参数一般是Func1,Func1的<I,O>I,O模版分别为输入和输出值的类型,实现Func1 ...

  6. 关于ArcGIS JS API中的map高度为400px的问题解决

    文章目录 问题现象 原因分析 解决方法 问题总结 问题现象 使用ArcGIS JavaScript API V3.27创建了一个最简单的地图页面,创建map对象时给传入了一个div,样式设的是宽高均为 ...

  7. Optional 中的 map 和 flatMap

    在面试的时候,面试官问了我一个问题.你使用过 Optional 吗?Optional 的原理是什么?我一听,这还不简单.Optional是一个枚举. public enum Optional<W ...

  8. java peek函数_Java 8 Stream Api 中的 peek 操作

    1. 前言 我在 Java 8 Stream API中的 map 和flatMap 中讲述了Java8 Stream API中 map 操作和 flatMap 操作的区别.然后有小伙伴告诉我 peek ...

  9. Java 8 Stream Api 中的 peek、map、foreach区别

    #1. 前言 我在Java8 Stream中讲述了 Java 8 Stream API 的一些内容.今天再看一下peek.map.foreach区别. 2. peek peek 操作接收的是一个 Co ...

最新文章

  1. iOS开发知识点总结
  2. OSCHina技术导向:Java全文搜索框架Lucene
  3. 一篇文章搞懂腾讯云AI平台的人工智能IDE:TI-ONE
  4. Webserver管理系列:5、利用MSConfig排查木马
  5. Linux内核之数据双链表
  6. Github使用技巧
  7. 三、spring中高级装配(1)
  8. USB加密狗复制工具
  9. 2019腾讯广告算法大赛思路(转自简书)有所改动(标蓝)
  10. 【测试】对网易邮箱登录的测试流程
  11. 智能门锁电路图_【干货】智能锁工作原理及技术原理分析
  12. 关于计算机信息管理专业教学改革的相关文章,计算机信息管理专业论文范文
  13. 计算机专业课学习清单(书籍+公开课)
  14. Order by 多条件排序
  15. ng-template、ng-container、ng-content 的用法
  16. Codeforces Gym 2015 ACM Arabella Collegiate Programming Contest
  17. 神经对抗网络 自动标注,神经对抗网络研究课题
  18. DNS安全(一)DNS缓存投毒与防护
  19. 两个文件内容差异对比,
  20. flume分布式日志收集系统操作

热门文章

  1. [html] html哪个标签属性可以通过预解析DNS?
  2. [html] 说说你对HTML元素的显示优先级的理解
  3. 前端学习(2636):文件缺失
  4. “约见”面试官系列之常见面试题之第一百零三篇之vue-router实现路由懒加载(建议收藏)
  5. 前端学习(742):arguments使用
  6. 第六十八期:做中台找死,不做中台等死?
  7. html:(2):制作第一个网页和html和css的关系
  8. oracle数据库归档闪回,[Oracle]Oracle的闪回归档
  9. [GAN学习系列3]采用深度学习和 TensorFlow 实现图片修复(下)
  10. bin文件怎么转换成文本文档_Python脚本4:根据txt文本,批量创建文件夹