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方法示意图:

img

flatMap:和map类似,不同的是每个元素 转换得到是Stream对象,会把子Stream中的元素压缩到父集合中:

flatMap方法示意图:

img

如果我们用一句话来总结flatmap:

把几个小的list转换成一个大的list

img

解决问题:

对于我们开始提出的问题,我们分为两步来完成:

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的区别了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab用高斯消元法解线性方程组,用matlab利用高斯消元法求解线性方程组

用matlab利用高斯消元法求解线性方程组Tag内容描述&#xff1a;1、用C语言编写软件完成以下任务&#xff1a;请用高斯列主元消元法解下列线性方程组&#xff1a;方法说明(以4阶为例)&#xff1a;第1步消元在增广矩阵(A&#xff0c;b)第一列中找到绝对值最大的元素&#xff0c;将…

shell 文件路径有空格_Python学习第57课-shell入门之基本简单命令(一)

【每天几分钟&#xff0c;从零入门python编程的世界&#xff01;】我们现在学习shell操作&#xff0c;对于shell的命令&#xff0c;我们就把它看做新的语言&#xff0c;shell语言&#xff0c;它是不同于其他编程语言的。就像我们学习一门编程语言&#xff0c;都是从打出“hell …

比较Spring AOP和AspectJ

1. 介绍 当前有多个可用的AOP库&#xff0c;这些库必须能够回答许多问题&#xff1a; 它与我现有的或新的应用程序兼容吗&#xff1f;在哪里可以实施AOP&#xff1f;它与我的应用程序集成的速度有多快&#xff1f;性能开销是多少&#xff1f; 在本文中&#xff0c;我们将着眼…

matlab中有哪些输出函数,MATLAB中查找并输出的函数有什么

程序如下&#xff1a;function Rusername(S)%S为用户名的字符串if ~isstr(S)error(Input argument is not string.);end%读取数据[Ad,At]xlsread(final exam-mini project-database.xlsx,Students);AAt(3:end,1:end);pisnan(Ad);pofind(p(1,:));Admat2cell(Ad,ones(1,size(Ad,1…

hough变换直线检测_python+opencv实现霍夫变换检测直线

作者&#xff1a;Ruff_XY功能&#xff1a;创建一个滑动条来控制检测直线的长度阈值&#xff0c;即大于该阈值的检测出来&#xff0c;小于该阈值的忽略 注意&#xff1a;这里用的函数是HoughLinesP而不是HoughLines&#xff0c;因为HoughLinesP直接给出了直线的断点&#xff0c;…

Java中replace、replaceAll和replaceFirst函数的用法小结

首先概述一下他们三个的用法&#xff1a; replace(CharSequence target, CharSequence replacement) &#xff0c;用replacement替换所有的target&#xff0c;两个参数都是字符串。 replaceAll(String regex, String replacement) &#xff0c;用replacement替换所有的rege…

php文件防删改,PHP实现增删改查以及防SQL注入

最近项目调研时&#xff0c;需要在集成板子上做个配置的网页&#xff0c;板子上装的是linux系统&#xff0c;配置信息在一个SQLite数据库中&#xff0c;经过讨论大家决定用PHP做这个网页。由于项目组没一个会PHP的&#xff0c;所以安排我调研下写个Demo&#xff0c;经过几天的研…

c# python 相互调用_【GhPython】Python如何使用“委托”和lambda表达式

【版权声明】| 作者&#xff1a;月之眼| 首发于大水牛参数化设计平台| 如需转载请联系作者| 如果觉得文章不错&#xff0c;欢迎分享 函数作为参数传入 在python中函数是能作为参数输入函数的。这个有点类似于C#中的委托&#xff0c;将一个函数封装到一个委托对象里&#xff0c;…

SpringAOP Aspect注解实现简单日志功能

SpringAOP实现简单日志功能 AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff1a;面向切面编程&#xff0c;Spring框架的重要组成部分&#xff0c;利用AOP我们可以将一些公用的业务逻辑部分抽取出来&#xff0c;动态的插入到程序中&#xff08;如日志记录、权…

chimerge算法matlab实现,有监督的卡方分箱算法

实现代码import numpy as npimport pandas as pdfrom collections import Counterdef chimerge(data, attr, label, max_intervals):distinct_vals sorted(set(data[attr])) # Sort the distinct valueslabels sorted(set(data[label])) # Get all possible labelsempty_coun…

金士顿u盘真假软件_简洁轻巧 金士顿DT80 Type-C高速闪存盘评测

从都市的高端会议到普通的日常娱乐&#xff0c;USB高速闪存应用于我们生产生活的方方面面。它小巧便携&#xff0c;稳定可靠的特点吸引了无数人去使用&#xff0c;同时为我们提供了诸多便利。闪存盘也就是日常生活中经常提到的U盘。大多数人对于U盘的印象是老式的USB Micro接口…

php阴影效果,如何使用css3实现文字的单阴影效果和多重阴影效果(

使用css3实现文本阴影效果的原理实现阴影效果主要是用text-shadow属性&#xff0c;根据W3C标准&#xff0c;如果我们想要在IE下兼容CSS3的阴影属性可以使用ie.css3-htc&#xff0c;不过按照标准InternetExplorer9以及更早版本的浏览器暂时不支持text-shadow属性。最基本的语法为…

SpringAOP+自定义注解实现日志功能

SpringAOP自定义注解实现日志功能 上篇文章讲解了springAOP实现简单日志功能&#xff0c;这次讲解使用自定义注解实现日志功能。具体pom、Spring、SpringMVC的配置不再进行讲解&#xff0c;详情点击链接查看[SpringAOP Aspect注解实现简单日志功能]。 如果你的项目使用的是sp…

promise链式调用_这一次,彻底弄懂 Promise

Promise 必须为以下三种状态之一&#xff1a;等待态(Pending)、执行态(Fulfilled)和拒绝态(Rejected)。一旦Promise 被 resolve 或 reject&#xff0c;不能再迁移至其他任何状态(即状态 immutable)。基本过程&#xff1a;初始化 Promise 状态(pending)执行 then(..) 注册回调处…

用MATLAB绘制国债NSS模型,[matlab]用lsqcurvefit或lsqnonlin实现NSS利率期限模型-经管之家官网!...

opt optimset(lsqcurvefit);opt.Display final;opt.MaxFunEvals20000;opt.MaxIter20000;opt.TolFun1e-140;opt.TolX1e-140;% x债券还有多久到期(年)&#xff1b;y对应债券到期收益率。% 所有数据均来自于上海证券交易所上市的国债。x [0.0274 0.0356 0.189 0.2 0.2411 0.380…

Spring 自定义注解,配置简单日志注解

java在jdk1.5中引入了注解&#xff0c;spring框架也正好把java注解发挥得淋漓尽致。 下面会讲解Spring中自定义注解的简单流程&#xff0c;其中会涉及到spring框架中的AOP&#xff08;面向切面编程&#xff09;相关概念。 不清楚java注解的&#xff0c;可以先了解java自定义注…

visual studio 判断dropdownlist选的是什么_心理测试:五个小蓝人,你选哪个?测你是不是一个容易追求的人...

下面这张图片里&#xff0c;有五个小蓝人&#xff0c;你觉得自己会是里面的哪一个&#xff1f;A. 站在家里的窗户边B. 站在河边C. 坐在屋顶D. 站在树上E. 骑着鸟飞在空中测试结果选A的你容易追求指数20%。你是一个温柔细腻的人。在别人的眼里&#xff0c;你是一个很贴心的人。在…

java中为何输出框会无限输出,MyBatis启动时控制台无限输出日志的原因及解决办法...

你是否遇到过下面的情况&#xff0c;控制台无限的输出下面的日志&#xff1a;Logging initialized using ‘class org.apache.ibatis.logging.log4j.Log4jImpl adapter.Logging initialized using ‘class org.apache.ibatis.logging.log4j.Log4jImpl adapter.Logging initiali…

基于注解SpringAOP,AfterReturning,Before,Around__springboot工程 @Around 简单的使用__SpringBoot:AOP 自定义注解实现日志管理

基于注解SpringAOP&#xff0c;AfterReturning&#xff0c;Before&#xff0c;Around AOP&#xff08;Aspect Oriented Programming&#xff09;&#xff0c;即面向切面编程&#xff08;也叫面向方面编程&#xff0c;面向方法编程&#xff09;。其主要作用是&#xff0c;在不修…

流浪地球开机动画包zip_【文娱热点】流浪地球2定档2023大年初一;迪士尼计划裁员32000人...

剧集、综艺任嘉伦、白鹿《长安如故》开机11月26日&#xff0c;根据小说《一生一世美人骨》古代篇改编的剧集《长安如故》开机&#xff0c;两位主演任嘉伦和白鹿继现代篇《一生一世》之后再演古代篇&#xff0c;俩人穿着棉服、梳着古装发髻现身开机仪式&#xff0c;心情非常好。…