flatMap的用法和含义住要通过一个案例来讲解,

案例:对给定单词列表 ["Hello","World"],你想返回列表["H","e","l","o","W","r","d"]

第一种方式

        String[] words = new String[]{"Hello","World"};List<String[]> a = Arrays.stream(words).map(word -> word.split("")).distinct().collect(toList());a.forEach(System.out::print);

代码输出为:[Ljava.lang.String;@12edcd21[Ljava.lang.String;@34c45dca

(返回一个包含两个String[]的list)

这个实现方式是由问题的,传递给map方法的lambda为每个单词生成了一个String[](String列表)。因此,map返回的流实际上是Stream<String[]> 类型的。你真正想要的是用Stream<String>来表示一个字符串。

下方图是上方代码stream的运行流程

第二种方式:flatMap(对流扁平化处理)

        String[] words = new String[]{"Hello","World"};List<String> a = Arrays.stream(words).map(word -> word.split("")).flatMap(Arrays::stream).distinct().collect(toList());a.forEach(System.out::print);

结果输出:HeloWrd

使用flatMap方法的效果是,各个数组并不是分别映射一个流,而是映射成流的内容,所有使用map(Array::stream)时生成的单个流被合并起来,即扁平化为一个流。

下图是运用flatMap的stream运行流程,

java8 stream流操作的flatMap(流的扁平化)相关推荐

  1. java8 stream运行原理之并行流原理详解

    上一篇文章<java8 stream运行原理之顺序流原理详解>介绍了顺序流的执行原理,本文接着上一篇介绍并行流的执行原理. 一.如何创建并行流 调用parallel()方法可以创建并行流, ...

  2. flatMap(对流扁平化处理)

    flatMap(对流扁平化处理) 对给定单词列表 ["Hello","World"],你想返回列表["H","e",&q ...

  3. Java8 Stream reduce操作

    Reduce,顾名思义为减少的意思,就是根据指定的计算模型将Stream中的值计算得到一个最终结果.在之前的一篇文章Java8函数式编程中简单介绍,Stream的count.min 和max方法底层都 ...

  4. java8新特新:接口流-Stream()接口和所有方法(map,foreach,filter,count,distinct,limit,collect,skip,sorted)

    Steam<T> 接口流 类型参数: T - 流元素的类型 所有超级接口: AutoCloseable,BaseStream <T,Stream <T >> 公共接 ...

  5. JAVA的stream流操作详细解析

    java的stram流操作 为什么需要 Stream 流与集合的区别 对比:原始集合操作与Stream集合操作 (过滤/映射/扁平化/遍历/排序/去重/跳过/截断的应用) 流的组成 流操作的分类 流的 ...

  6. Java Streams:流操作及示例

    正如我们在Java Streams:流创建中所学到的,流管道由源.零个或多个中间操作和一个终端操作组成. 我们还了解到,streams流是懒惰的:仅当终端操作启动时,才对源数据执行计算. 在本文中,我 ...

  7. 【Delphi入门】文件系统(文件分类 文件文本变量 文件操作 文件流操作)

    文件分类 文本文件(TextFile) & 二进制文件(Flie) 二进制形式存放数据占有存储空间较少,但不直观:文本文件与之相反 文件是由相同类型的数据元素组成的序列.在DELPHI中对文件 ...

  8. 使用JAVA流操作(POI)将Excel表中数据取出,并直接生成完整SQL语句

    使用POI读取excel,并输出为sql语句 一.准备工作 二.编写代码(Transform.java) 三.完整代码 四.POI所有常用方法参考 个人文章地址 一.准备工作 1.1.新建一个普通的M ...

  9. Java8 Stram常用操作

    Java8的新特性主要是Lambda表达式和流,当流和Lambda表达式结合起来一起使用时,因为流申明式处理数据集合的特点,可以让代码变得简洁易读. 流的操作类型主要分为两种: 1.中间操作: 一个流 ...

  10. java8 steam常用操作

    java8 stream常用操作 遍历 list.stream().forEach(System.out::println); 获取实体list某个字段集合 list.stream().map(e - ...

最新文章

  1. 实战:使用Mask-RCNN的停车位检测
  2. java内存区域之程序计数器
  3. leetcode-458-Poor Pigs
  4. 人生第一次手术:0817
  5. from...import 和 import 的区别
  6. AE After Effect 如何分段渲染
  7. Windows Mobile下C++取屏幕分辨率的方法
  8. 万兆以太网测试仪应该具备什么功能
  9. 如何高效学习前端新知识,拓展视野,我推荐
  10. 设计模式之——工厂方法模式
  11. zabbix2.2升级到zabbix3.0.2
  12. Linux实训vim编辑器的应用,Linux实训例题(vim编辑器)
  13. 拜登公布价值1.8万亿美元“美国家庭计划”
  14. js两种生成对象模式(公有成员和成员私有)
  15. Entity Framework Codefirst的配置步骤
  16. 蓝桥杯 ALGO-122 算法训练 未名湖边的烦恼
  17. 【Python】Python中的日志级别
  18. 无土栽培中的物联网技术应用
  19. 骑在银龙的背上歌词(带罗马音)
  20. 《东周列国志》第八十六回 吴起杀妻求将 驺忌鼓琴取相

热门文章

  1. mysql改根用户_MySQL数据库中复位根用户密码的方法 | 很文博客
  2. C/C++[codeup 2066]分组统计
  3. 翻译:神经网络 为什么要通过减去数据集的图像均值来标准化图像,而不是深度学习中的当前图像均值?
  4. 机器学习- 吴恩达Andrew Ng - week3-2 Logistic Regression Model
  5. 实战ReactNative 从入门到精通 重要技术解析,5分钟搭建iOS, Android App 实战一
  6. java内省_聊聊Java内省Introspector
  7. 423.从英文中重建数字
  8. java报错 csrf_CSRF Security Error解决办法
  9. Spring Cloud随记----分布式配置中心再探---消息总线的引入
  10. 推荐系统实践--基于用户的协同过滤算法