1. 什么情况下用到flatMap

  • 当使用map()操作时,不是返回一个值,而是返回一个集合或者一个数组的时候,这时候就可以使用flatMap解决这个问题。举个例子,你有一个列表 [21,23,42],然后你调用getPrimeFactors()方法map操作 使数组转化成stream。
  • 上述结果[[3,7],[23],[2,3,7]],这个类型Stream<String[]> 使用 stream 操作(filter,sum,distinct …)和 collectors 都不支持这种类型。如果你想把Stream of Stream转换为值列表,使用 flatMap() 方法 重新生成一个Stream对象,最后可以得到 [3,7,2,3,2,3,7]

2. flatMap如何工作的

通过下面的图,我们就很容易理解flatmap在java8 中是如何工作的

使用红色标记的列表和绿色标记的列表,经过flatmap方法后在第二个管道中把把上述两个列表的数据合并成一个列表数据

3. flatmap 使用例子

     List<List<Integer>> lists = new ArrayList<>();List<Integer> list = new ArrayList<>();list.add(4444);list.add(33333);list.add(444444);lists.add(list);lists.stream().flatMap(Collection::stream).forEach(System.out::println);

由于上述 lists.stream() 后返回的是stream<list> 所以需要使用flatMap 进行合并

3. 总结

本文主要通过为啥使用 flatmap,如何使用flatmap 这两点讲述了flatmap方法,下一章节我们来讲一个map & flatmap。

参考文档
How to use flatMap() in Java 8
Java 8 flatMap示例

如何使用flatMap相关推荐

  1. 2021年大数据常用语言Scala(二十三):函数式编程 扁平化映射 flatMap

    目录 扁平化映射 | flatMap 定义 案例 扁平化映射  flatMap 扁平化映射也是将来用得非常多的操作,也是必须要掌握的. 定义 可以把flatMap,理解为先map,然后再flatten ...

  2. stream map方法_Java Stream中map和flatMap方法

    最近看到一篇讲stream语法的文章,学习Java中map()和flatMap()方法之间的区别. 虽然看起来这两种方法都做同样的事情,都是做的映射操作,但实际上差之毫厘谬以千里. 通过演示Demo中 ...

  3. Scala 深入浅出实战经典 第88讲:Scala中使用For表达式实现map、flatMap、filter

    高级函数 map,flatMap,filter用for循环的实现. package com.dt.scala.forexpression object For_Advanced { def main( ...

  4. 谈谈 Swift 中的 map 和 flatMap

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

  5. flat在java中的含义_java – 在flatingBy中使用flatMap的优雅方法

    所以我有一段代码,我在迭代一个数据列表.每一个都是一个ReportData,它包含一个具有Long caseId和一个Ruling的案例.每项裁决都有一项或多项付款.我希望将带有caseId的Map作 ...

  6. Optional 中的 map 和 flatMap

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

  7. Scalaz(12)- Monad:再述述flatMap,顺便了解MonadPlus

    在前面的几篇讨论里我们初步对FP有了些少了解:FP嘛,不就是F[A]吗?也是,FP就是在F[]壳子(context)内对程序的状态进行更改,也就是在F壳子(context)内施用一些函数.再直白一点就 ...

  8. RxJava 中的map与flatMap

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

  9. RxJava flatMap操作符用法详解

    RxJava系列文章目录导读: 一.RxJava create操作符的用法和源码分析 二.RxJava map操作符用法详解 三.RxJava flatMap操作符用法详解 四.RxJava conc ...

  10. Swfit Array 遍历 map flatMap filter reduce

    官网文档:Apple Developer Documentation 常用属性和方法可查看官网文档. 一.遍历 这里主要记录下遍历方法. 使用for in 遍历 for item in arr {pr ...

最新文章

  1. Linux之查找文件命令
  2. Python中使用元组对ndarray矩阵的某个维度进行选取和调序的操作
  3. Python多线程技术增加网站帖子的查看量
  4. 7个jquery easy ui 基本组件图解
  5. ITK:向量值图像像素的变换幅度
  6. Pandas中文官档 ~ 基础用法1
  7. 僵尸进程和孤儿进程 转载
  8. 【iVX 初级工程师培训教程 10篇文拿证】04 画布及我和 iVX 合照
  9. 蓝桥杯练习系统,入门训练,Java版
  10. shell脚本执行命令错误处理
  11. Android API介绍
  12. 3D建模、处理软件及部分算法库简介
  13. 大数据与云计算概论简介
  14. 数值分析18 - 通过直接方法得到函数积分近似 数值方法(左、右、中、梯形矩形积分公式、Simpson积分公式)
  15. 解读机器人视觉类别及应用原理
  16. java中getter和setter,Java中的Getter和Setter
  17. 胡忠想|微博微服务架构的Service Mesh实践之路
  18. Google Earth Engine——美国房地产数据和市场趋势应用(网页交互式APP)
  19. e课表项目第二次冲刺周期第八天
  20. python日历模块_python 日历模块calendar

热门文章

  1. java中int与char的互相转换
  2. jdk环境配置没问题eclipse打不开出现Incompatible JVM错误
  3. Ubuntu能识别到外接显示器但外接显示器黑屏的解决方案
  4. 常用的FireFox扩展插件
  5. 2011年11月51CTO壁纸点评活动获奖名单【已结束】
  6. Ceph 的 Crush 算法原理(中文翻译)
  7. 【基于Btrace的监控调试】
  8. js动态添加按钮,并绑定点击事件
  9. 使用highcharts绘制趋势图
  10. css知识点作业练习