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,一经查实,立即删除!

相关文章

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;我们将着眼…

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

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

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;…

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属性。最基本的语法为…

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

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

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;心情非常好。…

matlab读气象数据,中国气象数据网

“中国气象科学数据共享服务网”的气象卫星资料与国内其他气象卫星资料发布平台的最大不同之处&#xff0c;在于卫星数据资源内容不同且时间序列相当完整。而且&#xff0c;(1)数据获取更便捷。在线获取数据无需等待邮件通知&#xff0c;无数据下载量限制。共享卫星资源是公益性…

spring中自定义注解(annotation)与AOP中获取注解___使用aspectj的@Around注解实现用户操作和操作结果日志

spring中自定义注解(annotation)与AOP中获取注解 一、自定义注解(annotation) 自定义注解的作用&#xff1a;在反射中获取注解&#xff0c;以取得注解修饰的类、方法或属性的相关解释。 package me.lichunlong.spring.annotation;import java.lang.annotation.Documented; …

python 编译器pyc_有没有办法知道哪个Python版本.pyc文件被编译?

Is there any way to know by which Python version the .pyc file was compiled? 解决方案 You can get the magic number of your Python as follows: $ python -V Python 2.6.2 # python >>> import imp >>> imp.get_magic().encode(hex) d1f20d0a To ge…

Spring AOP——Spring 中面向切面编程

前面两篇文章记录了 Spring IOC 的相关知识&#xff0c;本文记录 Spring 中的另一特性 AOP 相关知识。 部分参考资料&#xff1a; 《Spring实战&#xff08;第4版&#xff09;》 《轻量级 JavaEE 企业应用实战&#xff08;第四版&#xff09;》 Spring 官方文档 W3CSchool Spri…

python getchar,Linux C编程学习:getchar()和getch()

getchar函数名: getchar功 能: 从stdin流中读字符用 法: int getchar(void);注解&#xff1a;getchar有一个int型的返回值&#xff0c;当程序调用getchar时程序就等着用户按键&#xff0c;用户输入的字符被存放在键盘缓冲区中直到用户按回车为止(回车字符也放在缓冲区中)。当用…

python 折线图中文乱码_彻底解决 Python画图中文乱码问题--Pyplotz组件

1 源起 自从开始学习Python&#xff0c;就非常喜欢用来画图。一直没有需求画要中文显示信息的图&#xff0c;所以没有配置Python中文的环境。由于昨天就需要画几十个形式相同&#xff0c;只是数据不同的图&#xff0c;并且需要显示中文信息。如果用Excel画图会很浪费时间&#…

SpringBoot的AOP是默认开启的,不需要加注解@EnableAspectJAutoProxy____听说SpringAOP 有坑?那就来踩一踩

Aspect Component public class CustomerServiceInterceptor {Before("execution(public * org.example.aop.demo..*.*(..))")public void doBefore() {System.out.println("do some important things before...");} }另外SpringBoot默认是cglib动态代理&a…