java8 stream流操作的flatMap(流的扁平化)
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(流的扁平化)相关推荐
- java8 stream运行原理之并行流原理详解
上一篇文章<java8 stream运行原理之顺序流原理详解>介绍了顺序流的执行原理,本文接着上一篇介绍并行流的执行原理. 一.如何创建并行流 调用parallel()方法可以创建并行流, ...
- flatMap(对流扁平化处理)
flatMap(对流扁平化处理) 对给定单词列表 ["Hello","World"],你想返回列表["H","e",&q ...
- Java8 Stream reduce操作
Reduce,顾名思义为减少的意思,就是根据指定的计算模型将Stream中的值计算得到一个最终结果.在之前的一篇文章Java8函数式编程中简单介绍,Stream的count.min 和max方法底层都 ...
- java8新特新:接口流-Stream()接口和所有方法(map,foreach,filter,count,distinct,limit,collect,skip,sorted)
Steam<T> 接口流 类型参数: T - 流元素的类型 所有超级接口: AutoCloseable,BaseStream <T,Stream <T >> 公共接 ...
- JAVA的stream流操作详细解析
java的stram流操作 为什么需要 Stream 流与集合的区别 对比:原始集合操作与Stream集合操作 (过滤/映射/扁平化/遍历/排序/去重/跳过/截断的应用) 流的组成 流操作的分类 流的 ...
- Java Streams:流操作及示例
正如我们在Java Streams:流创建中所学到的,流管道由源.零个或多个中间操作和一个终端操作组成. 我们还了解到,streams流是懒惰的:仅当终端操作启动时,才对源数据执行计算. 在本文中,我 ...
- 【Delphi入门】文件系统(文件分类 文件文本变量 文件操作 文件流操作)
文件分类 文本文件(TextFile) & 二进制文件(Flie) 二进制形式存放数据占有存储空间较少,但不直观:文本文件与之相反 文件是由相同类型的数据元素组成的序列.在DELPHI中对文件 ...
- 使用JAVA流操作(POI)将Excel表中数据取出,并直接生成完整SQL语句
使用POI读取excel,并输出为sql语句 一.准备工作 二.编写代码(Transform.java) 三.完整代码 四.POI所有常用方法参考 个人文章地址 一.准备工作 1.1.新建一个普通的M ...
- Java8 Stram常用操作
Java8的新特性主要是Lambda表达式和流,当流和Lambda表达式结合起来一起使用时,因为流申明式处理数据集合的特点,可以让代码变得简洁易读. 流的操作类型主要分为两种: 1.中间操作: 一个流 ...
- java8 steam常用操作
java8 stream常用操作 遍历 list.stream().forEach(System.out::println); 获取实体list某个字段集合 list.stream().map(e - ...
最新文章
- 实战:使用Mask-RCNN的停车位检测
- java内存区域之程序计数器
- leetcode-458-Poor Pigs
- 人生第一次手术:0817
- from...import 和 import 的区别
- AE After Effect 如何分段渲染
- Windows Mobile下C++取屏幕分辨率的方法
- 万兆以太网测试仪应该具备什么功能
- 如何高效学习前端新知识,拓展视野,我推荐
- 设计模式之——工厂方法模式
- zabbix2.2升级到zabbix3.0.2
- Linux实训vim编辑器的应用,Linux实训例题(vim编辑器)
- 拜登公布价值1.8万亿美元“美国家庭计划”
- js两种生成对象模式(公有成员和成员私有)
- Entity Framework Codefirst的配置步骤
- 蓝桥杯 ALGO-122 算法训练 未名湖边的烦恼
- 【Python】Python中的日志级别
- 无土栽培中的物联网技术应用
- 骑在银龙的背上歌词(带罗马音)
- 《东周列国志》第八十六回 吴起杀妻求将 驺忌鼓琴取相
热门文章
- mysql改根用户_MySQL数据库中复位根用户密码的方法 | 很文博客
- C/C++[codeup 2066]分组统计
- 翻译:神经网络 为什么要通过减去数据集的图像均值来标准化图像,而不是深度学习中的当前图像均值?
- 机器学习- 吴恩达Andrew Ng - week3-2 Logistic Regression Model
- 实战ReactNative 从入门到精通 重要技术解析,5分钟搭建iOS, Android App 实战一
- java内省_聊聊Java内省Introspector
- 423.从英文中重建数字
- java报错 csrf_CSRF Security Error解决办法
- Spring Cloud随记----分布式配置中心再探---消息总线的引入
- 推荐系统实践--基于用户的协同过滤算法