java8中的map与flatmap区别
map:只能返回一个值
flatmap:返回多个值
new ArrayList().stream().map(x -> x);//返回一个
new ArrayList().stream().flatMap(x -> Arrays.asList(x.split(" ")).stream());//返回一个流,也就是多个值
看API声明可以发现,flatmap接受的参数是流类型,map接受的非流类型,flatmap会把结果中的所有流的所有元素合并起来。
问题
假如我们有这样一个需求给定单词列表[“Hello”,“World”],你想要返回列表[“H”,“e”,“l”, “o”,“W”,“r”,“d”],如果我们使用java实现这个需求,你会怎么实现呢?可能我们第一个想法是下面这种写法:
words.stream()
.map(word -> word.split(""))
.distinct()
.collect(toList());
但是如果我们运行会发现这样的写法是不正确的,这个方法的问题在于,传递给map方法的Lambda为每个单词返回了一个String[](String列表)。因此, map 返回的流实际上是Stream 类型的。你真正想要的是用
Stream来表示一个字符流。因此,这是行不通的。
我们带着上面的问题进行下面的分析:
map和flatmap的区别
map:对于stream中包含的元素使用 特定的转换函数进行转换操作,新生成的Stream只包含转换生成的元素。这个方法有三个对于原始类型的变种方法,分别是mapToInt,mapToLong和mapToDouble.这三个方法比较好理解,比如mapToInt就是把原始的Stream转换成一个新的Stream,这个新生成的Stream中的元素map方法示意图:
flatMap:和map类似,不同的是每个元素 转换得到是Stream对象,会把子Stream中的元素压缩到父集合中:
flatMap方法示意图:
如果我们用一句话来总结flatmap:
把几个小的list转换成一个大的list
解决问题:
对于我们开始提出的问题,我们分为两步来完成:
1、分隔字符串,将数据中的字母都分隔开,形成多个小list新的stream
2、组装成新的list
String[] strings = {"Hello", "World"};List<String> collect = Stream.of(strings).map(s -> s.split("")).flatMap(s -> Stream.of(s)).distinct().collect(Collectors.toList());collect.forEach(c->{System.out.println(c);});
这样我们就可以很好地理解map和flatmap的区别了
java8中的map与flatmap区别相关推荐
- Java中Set Map List 的区别
java中set map list的区别: 都是集合接口 简要说明 set --其中的值不允许重复,无序的数据结构 list --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构 ...
- java8 flatmap与map_java8中map和flatMap区别
1.函数定义比较 map注释: /** * Returns a stream consisting of the results of applying the given * function to ...
- java8 stream to map_Java 8 Stream Api 中的 map和 flatMap 操作
1.前言 Java 8 提供了非常好用的 Stream API ,可以很方便的操作集合.今天我们来探讨两个 Stream 中间操作 map 和 flatMap 2. map 操作 map 操作是将流中 ...
- 谈谈 Swift 中的 map 和 flatMap
map 和 flatMap 是 Swift 中两个常用的函数,它们体现了 Swift 中很多的特性.对于简单的使用来说,它们的接口并不复杂,但它们内部的机制还是非常值得研究的,能够帮助我们够好的理解 ...
- RxJava 中的map与flatMap
1.map和flatMap都是接受一个函数作为参数(Func1) 2.map函数只有一个参数,参数一般是Func1,Func1的<I,O>I,O模版分别为输入和输出值的类型,实现Func1 ...
- spark RDD 的map与flatmap区别说明(转)
转载前备注: 下面的实验全部在spark-shell中运行即可 #------------------------------------------------------------------- ...
- Optional 中的 map 和 flatMap
在面试的时候,面试官问了我一个问题.你使用过 Optional 吗?Optional 的原理是什么?我一听,这还不简单.Optional是一个枚举. public enum Optional<W ...
- Java 8 Stream Api 中的 map和 flatMap 操作
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「码农小胖哥」 1.前言 Java 8 ...
- map and flatmap 区别
2019独角兽企业重金招聘Python工程师标准>>> map vs flatMap in Spark September 24, 2014Big Dataexample, spar ...
最新文章
- jQuery-基本选择器的种类
- 51. ExtJs4之Ext.util.JSON编码和解码JSON对象
- Spring框架第二天知识总结
- javascript --- 堆栈内存与闭包的作用
- zabbix监控suse linux,SuSE 系统之部署 Zabbix 监控服务
- linux定时任务的用法详解
- Struts2 转换器
- jQuery迷你帮助查找功能
- 进程占用过高cpu的排查
- 爬取百度贴吧发帖信息并保存到scv文件中
- 火山视频去水印,无水印视频解析原理及实现
- 何通过ArcCatalog本地发布地图服务
- 信息资源管理【二】之 信息化规划与组织
- 数据库系统原理——实验一
- OSChina 周日乱弹 ——书中自有颜如玉
- python语言是干什么的-python语言可以干什么
- matlab要掌握什么,学习matlab需要什么基础?
- 显示器会影响电脑的显示效果么
- 重磅!《新一代人工智能伦理规范》发布丨附全文
- 实时获取Android手机CPU频率
热门文章
- spool导出姓名中文乱码_MySQL不同字符集转化标准—7步实现,杜绝乱码!
- kotlin中判断字符串_Kotlin程序删除字符串中所有出现的字符
- c#异常处理_C#异常处理能力问题和解答 套装4
- Android8内测申请,小米 6 安卓 8.0 来了 内测开始招募
- win7变成xp风格了怎么改回_XP退役了,如何把Win7变成XP风格
- Java Collections BinarySearch()方法与示例
- SpringCloud Ribbon中的7种负载均衡策略!
- 2019年总结 | 31岁,不过是另一个开始
- Sql Server常用时间段查询汇总
- 关于怎么获取jsp的web站点的目录问题