Java8中Stream的map与flatmap区别

【Java必修课】Java 8中map()与flatMap()在Optional和Stream中的区别 在Java 8中,我们可以在Optional和Stream经常看到map()和flatMap()这两个方法,这两个方法是针对函数式特性引入的,两者功能上看似相近,但其实还是有很大区别的。让我们来了解一下吧。 Optional中的比较 我们会经常在Optional中使用到map()做对象转化,如下把一个整数转化成它的两倍: Optional<Integer> num = O... 阅读详情

先来个总结:

map是对一级元素进行操作,flatmap是对二级元素操作。

map自动返回stream对象,flatmap处理后的元素依然要是stream对象(可以用stream.of,Arrays.stream将元素转为stream对象)。

打个比方,有一个二维数组a[2][3],通过map每次操作的都是一个一维数组,如a[0]和a[1],执行完后就各自返回一个处理后的一维数组,这样a[2][3]经过map操作后就会返回两个一维的数组,然后汇集成一个stream后返回。

而flatmap每次操作后就是单个元素,比如a[0][0],a[0][1],所有元素执行完后再汇集起来变成一个stream。

详细经过:

定义一个字符串数组 ss:

        String[] ss = {
                "hello welcome",
                "world hello",
                "hello world",
                "hello world welcome"
        };

 通过Stream.of获取一个stream

Stream<String>testStream= Stream.of(ss);

这stream其实是一个字符串的数组转换来的,我们通过将整个流的每个元素进行字符串拆分(split),再输出拆分后的字符串 

通过map进行字符串分割操作后的ss变成了 一个二维数组。

testStream.map(str-> str.split(" "))
        .forEach(strStream-> System.out.println(strStream));

控制台输出:

[Ljava.lang.String;@5a42bbf4
[Ljava.lang.String;@270421f5
[Ljava.lang.String;@52d455b8
[Ljava.lang.String;@4f4a7090

 

我们可以看到经过map后,原本的stream是被分成了四个string数组对象,借助Arrays.toString转换成字符串后查看:

testStream.map(str-> Arrays.stream(str.split(" ")))
        .forEach(strStream-> System.out.println(Arrays.toString(strStream.toArray())));

输出:

[hello, welcome]

[world, hello]

[hello, world]

[hello, world, welcome]

也就是说,之前的map的操作是对ss[i] (0 <=i <4) 分别进行处理,处理完后就返回一个数组对象,最后再变成一个stream,所以在stream的foreach遍历的时候,就有四个stream对象

 

而flatmap的操作则是深入到每一个元素,对每个ss[i]数组处理后,汇集成一个新的stream

testStream.flatMap(str-> Arrays.stream(str.split(" ")))
        .forEach(strStream-> System.out.println(strStream));

注意flatmap与map上的用法区别,flatmap需要再加一个Arrays.stream,而map不用。

 

控制台输出:

hello

welcome

world

hello

hello

world

hello

lift off工艺为什么常用蒸发的方式镀膜? 电子束蒸发中,蒸发物质从源头直接升华并沿直线路径沉积到晶圆上,它可以避免金属在掩模侧壁的覆盖,只在表面进行沉积。在镀膜结束后,在进行光刻胶剥离时,去胶液无法与光刻胶接触反应,导致光刻胶剥离很困难。欢迎加入我的半导体制造知识星球社区,目前社区有1900人左右。我观察到晶圆厂中lift off工艺,镀膜都是用的电子束蒸发的方式,很少有用磁控溅射的方式,为什么?需要增加撕胶工序,将胶面上覆盖的膜层撕掉,使光刻胶露出,这样才容易剥离。上图为磁控溅射的膜层截面图,去胶液很难突破侧壁膜层,进行反应。 阅读详情

相关推荐

手把手教你绕过网易易盾验证码:滑块、点选、语序全攻略

本文深度解析了以网易易盾为代表的现代验证码技术,重点探讨了滑块、点选、语序及空间推理等交互式验证码的工作原理与对抗策略。文章从行为验证和空间推理的核心逻辑出发,剖析了验证码交互的数据流与关键参数,并提供了模拟人类行为轨迹、维护设备指纹等工程实践方法,旨在帮助开发者在合规前提下设计更健壮的自动化流程。

3c4x5z6v7b的博客 699

JDK8特性:Stream流操作中的map()与 flatMap()

(1)map(),对集合中的元素逐个进行函数操作映射成另外一个。(2)flatMap,接收一个函数作为参数,将流中的每个值都转换为另一个流,然后把所有的流都连接成一个流。

Newbie的专栏 7678

XGBoost详解(原理篇)

XGBoost全称为eXtreme Gradient Boosting,即极致梯度提升树。XGBoost是Boosting算法的其中一种,Boosting算法的思想是将许多弱分类器集成在一起,形成一个强分类器(个体学习器间存在强依赖关系,必须串行生成的序列化方法)。Note:关于Boosting算法详见博文集成学习详解_tt丫的博客-优快云博客XGBoost是一种提升树模型,即它将许多树模型集成在一起,形成一个很强的分类器。其中所用到的树模型则是CART回归树模型。

tt丫的博客 7万+

java8 stream中map与flatMap的区别

latMap与map的区别在于* flatMap是将一个流中的每个值都转成一个个流,然后再将这些流扁平化成为一个流 。举例如下: String[] strs = {“java8”, “is”, “easy”, “to”, “use”}; List&lt;String[]&gt; distinctStrs = Arrays.stream(strs) ...

南来北往的客 3740

timing window file中的S L T指什么意思

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 771

【AI大模型应用开发】3.2 RAG实战 - RAG应用+UI实现加载本地文件并对话

前面我们实现了RAG基本流程,今天我们在此基础上给它加个UI界面,在浏览器打开,实现上传本地文件、解析,并用大模型实现与该文档的对话。也就是一个阉割版demo版的ChatPDF或知识库对话系统。

同学小张的博客 3053

jdk8 Stream map和flatMap区别

1.map 将一种类型的值转换为另外一种类型的值。代码:将List 转换成List List collected = Stream.of("a", "b").collect(Collectors.toList()); List figure = collected.stream().map(s -> { Integer i; switc

andyzhaojianhui的专栏 3万+

基于深度学习的涂胶缺陷类型检测:数据集处理与YOLOv8模型实现

本文提出了一种基于YOLOv8深度学习的涂胶缺陷检测系统,针对断胶、溢胶、缺胶、气泡及胶条宽度异常等常见缺陷类型,实现了从数据采集到模型部署的完整解决方案。系统采用工业相机采集涂胶图像,通过多形态数据增强策略解决样本稀缺问题,利用YOLOv8框架实现高效检测。相比传统人工目检和规则式机器视觉方法,该系统在检测精度(mAP达97.5%)和实时性(单图检测耗时0.038秒)方面表现优异,可满足智能制造场景下的涂胶质量检测需求。

huanghm88的专栏 271

Java8 Stream的map和flatMap的区别

package com.lgx.jdk8.part02; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; /** * Stream的map和flatMap

lgx06的专栏 2万+

2023华为od机试C卷【推荐多样性】Java&Go 实现

推荐多样性需要从多个列表中选择元素,一次性要返回N屏数据(窗口数量),每屏展示K个元素(窗口大小),选择策略1.各个列表元素需要做穿插处理,即先从第一个列表中为每屏选择一元素,再从第二个列表中为每屏选择一个元素,依次类推2.每个列表的元素尽量均分为N份,如果不够N个,也要全部分配完,

MISAYAONE的博客 2180

倍福EL6002做RS232通信获取称重数据..

本文介绍EL6002模块通过RS232自由口通信协议获取从站数据。具体数据对照说明手册即可。

weixin_41883890的博客 1010

java8Stream流处理中map和flatMap的区别

案例:对给定单词列表 ["Hello","World"],你想返回列表["H","e","l","o","W","r","d"] 使用map方式 @Test public void jdk8StreamMap() { List<String> words = new ArrayList<String>(); words.add("hello"); words.add("word"); //

ystyaoshengting的专栏 907

本地搭建 GitLab 14.1.0版本CI/CD

GitLab 镜像版本 gitlab/gitlab-ce:14.1.0-ce.0 GitLab Runner 镜像版本 gitlab/gitlab-runner:v14.1.0 搭建此套环境是在一台32G的windows电脑上安装的。 使用dokcer安装。 此外还涉及的软件Docker Desktop,WSL 安装GitLab 首先启动 dockcer,打开WSL 打开后 首先定义GitLab的持久化目录 export GITLAB_HOME=/srv/gitlab 然后运行安装GitLab的命令

知无涯 4491

java8 flatmap与map_java8 Stream map和flatmap的区别

map和flatmap的区别map只是一维 1对1 的映射而flatmap可以将一个2维的集合映射成一个一维,相当于他映射的深度比map深了一层 ,所以名称上就把map加了个flat 叫flatmapflatMap的用法和含义住要通过一个案例来讲解,案例:对给定单词列表 ["Hello","World"],你想返回列表["H","e","l","o","W","r","d"]第一种方式代码输出为:...

weixin_28523493的博客 554

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

java8Stream map和flatmap的区别

map只是一维 1对1 的映射 而flatmap可以将一个2维的集合映射成一个一维,相当于他映射的深度比map深了一层 , 所以名称上就把map加了个flat 叫flatmap 直接上代码测试: @Test public void test36(){ /**获取单词,**/ List<String> list = Arrays.asList("...

wojiaohb的博客 459

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java8的 lambda Stream的 map 和 flatmap 方法区别 map和flatMap方法的用法

今天在看java lambda stream的时候,发现2个方法map 和 flatMap 方法很相似,都是遍历集合,返回对象,本着刨根问底的决心,来对比下 这2个方法的相同点和区别。

HaHa_Sir的博客 5679

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java8Stream map和flatmap的区别

map和flatmap的区别 map只是一维 1对1 的映射 而flatmap可以将一个2维的集合映射成一个一维,相当于他映射的深度比map深了一层 , 所以名称上就把map加了个flat 叫flatmap map map 方法用于映射每个元素到对应的结果,以下代码片段使用 map 输出了元素对应的平方数: List&lt;Integer&gt; numbers = Array...

_夜渐凉 1631

java8之数据流Stream的Map和flatMap的区别

XML Code  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48

凌夜知惜 4295

java8 map flatmap_java8Stream map和flatmap的区别

map和flatmap的区别map只是一维 1对1 的映射而flatmap可以将一个2维的集合映射成一个一维,相当于他映射的深度比map深了一层 ,所以名称上就把map加了个flat 叫flatmapflatMap的用法和含义住要通过一个案例来讲解,案例:对给定单词列表 ["Hello","World"],你想返回列表["H","e","l","o","W","r","d"]第一种方式String...

weixin_31046701的博客 316

别告诉我Java8都出来这么久了,你还搞不懂Stream的map和flatmap的区别?

文章目录别告诉我Java8都出来这么久了,你还搞不懂Stream的map和flatmap的区别?Java8 map相关的方法Java8 flatMap相关的方法参考 别告诉我Java8都出来这么久了,你还搞不懂Stream的map和flatmap的区别? Java8 map相关的方法 /** * Returns a stream consisting of the results of applying the given * function to the elements o

C. 356

【Java 8 Stream 核心技巧】:map 与 flatMap 到底有什么区别?90%的开发者都用错了

掌握Java 8 Stream的map与flatMap核心区别,轻松解决数据扁平化处理难题。详解两种方法在集合转换中的适用场景与关键差异,揭示链式操作中的性能优势,避免常见误用。深入浅出,值得收藏。

LiteCompile的博客 1364

java 8 Stream流当中的map和flatMap的区别

在Java 8及更高版本中引入的Stream API是处理集合数据的强大工具,其中map和flatMap是两个常用的操作,它们用于转换流中的元素。

weixin_68937173的博客 507

Java8新特性 - Stream - 24 - Stream的map与flatMap方法的区别

0.前言 各位看官,本片文章中的文字描述部分是核心,务必通读后再去看代码,否则可能有些吃力 1.方法描述 1.1 map <R> Stream<R> map(Function<? super T, ? extends R> mapper); 【功能说明】:返回一个包含【给定功能处理结果】的Stream对象。 【举例说明1】 :输入一个字符串“a”,功能方法中将字符串添加了前缀 “perfix_”,则返回的Stream对象中的元素为 :【字符串 :“perfix_a”】

northcastle的博客 1000

Java8 Stream(7)List集合转换 map flatMap 区别

一、映射 map map是映射的意思,可以理解把数据1对1的转换。 map方法定义如下 <R> Stream<R> map(Function<? super T, ? extends R> mapper); Function<? super T, ? extends R> mapper表示一个函数,输入类型是T,输出类型是R。 相当于把Stream流中每一个元素从T类型转换成R类型。 1. 造点数据 pigs.add(new Pig(1, "猪爸爸", 31

Java Spring Elasticsearch 1824
上一篇: git的常用操作
下一篇: layui的表单与表格使用详解
不腾
博客等级 码龄9年 579粉丝 52原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值