Stream流中Map方法的使用

news/2024/12/21 3:45:58/

map函数的作用就是针对管道流中的每一个数据元素进行转换操作。

主要有三种用法

一、Stream管道流map的基础用法

将集合中的每个字符串,全部转化成大写!

不使用流

List<String> list = Arrays.asList("Monkey", "Lion", "Giraffe", "Lemur";
//不使用Stream管道流
List<String> listUpper = new ArrayList<>();
for (String s : list) {listUpper.add(s.toUpperCase());
}
System.out.println(listUpper); //[MONKEY, LION, GIRAFFE, LEMUR]                     

使用流

List<String> list = Arrays.asList("Monkey", "Lion", "Giraffe", "Lemur";
// 使用Stream管道流
List<String> collect = list.stream().map(String::toUpperCase).collect(Collectors.toList());
//上面使用了方法引用,和下面的lambda表达式语法效果是一样的
//List<String> collect = alpha.stream().map(s -> s.toUpperCase()).collect(Collectors.toList());System.out.println(collect); //[MONKEY, LION, GIRAFFE, LEMUR]

二、处理非字符串类型集合元素

map()函数不仅可以处理数据,还可以转换数据的类型

List<String> list = Arrays.asList("Monkey", "Lion", "Giraffe", "Lemur";
List<Integer> lengths = list.stream().map(String::length).collect(Collectors.toList());System.out.println(lengths); //[6, 4, 7, 5]
Stream.of("Monkey", "Lion", "Giraffe", "Lemur").mapToInt(String::length).forEach(System.out::println);

输出如下:

6
4
7
5

除了mapToInt。还有maoToLong,mapToDouble等等用法

三、处理对象数据格式转换

Employee类,创建10个对象。

需求如下:

将每一个Employee的年龄增加一岁,将性别中的“M”换成“male”,F换成Female。

public static void main(String[] args){Employee e1 = new Employee(1,23,"M","Rick","Beethovan");Employee e2 = new Employee(2,13,"F","Martina","Hengis");Employee e3 = new Employee(3,43,"M","Ricky","Martin");Employee e4 = new Employee(4,26,"M","Jon","Lowman");Employee e5 = new Employee(5,19,"F","Cristine","Maria");Employee e6 = new Employee(6,15,"M","David","Feezor");Employee e7 = new Employee(7,68,"F","Melissa","Roy");Employee e8 = new Employee(8,79,"M","Alex","Gussin");Employee e9 = new Employee(9,15,"F","Neetu","Singh");Employee e10 = new Employee(10,45,"M","Naveen","Jain");List<Employee> employees = Arrays.asList(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10);/*List<Employee> maped = employees.stream().map(e -> {e.setAge(e.getAge() + 1);e.setGender(e.getGender().equals("M")?"male":"female");return e;}).collect(Collectors.toList());*/List<Employee> maped = employees.stream().peek(e -> {e.setAge(e.getAge() + 1);e.setGender(e.getGender().equals("M")?"male":"female");}).collect(Collectors.toList());System.out.println(maped);}

由于map的参数e就是返回值,所以可以用peek函数。peek函数是一种特殊的map函数,当函数没有返回值或者参数就是返回值的时候可以使用peek函数。

四、flatMap

map可以对管道流中的数据进行转换操作,但是如果管道中还有管道该如何处理?即:如何处理二维数组及二维集合类。实现一个简单的需求:将“hello”,“world”两个字符串组成的集合,元素的每一个字母打印出来。如果不用Stream我们怎么写?写2层for循环,第一层遍历字符串,并且将字符串拆分成char数组,第二层for循环遍历char数组。

List<String> words = Arrays.asList("hello", "word");
words.stream().map(w -> Arrays.stream(w.split("")))    //[[h,e,l,l,o],[w,o,r,l,d]].forEach(System.out::println);

输出打印结果:

java.util.stream.ReferencePipeline$Head@3551a94
java.util.stream.ReferencePipeline$Head@531be3c5

用map方法是做不到的,这个需求用map方法无法实现。map只能针对一维数组进行操作,数组里面还有数组,管道里面还有管道,它是处理不了每一个元素的。

在这里插入图片描述

flatMap可以理解为将若干个子管道中的数据全都,平面展开到父管道中进行处理。

在这里插入图片描述

words.stream().flatMap(w -> Arrays.stream(w.split(""))) // [h,e,l,l,o,w,o,r,l,d].forEach(System.out::println);

输出打印结果:

h
e
l
l
o
w
o
r
d

参考链接:

  1. stream之map的用法

http://www.ppmy.cn/news/569112.html

相关文章

能上QQ但打不开网页的简单修复方法

有时用完梯子之后&#xff0c;电脑就能上qq但是打不开网页&#xff0c;看了百度清一色的方法&#xff0c;啥dns缓存啥的&#xff0c;很麻烦&#xff1b;用电脑管家修复还要重启&#xff0c;所以后来试了试直接关掉代理服务器&#xff0c;屡试不爽。 步骤如下&#xff0c;以Edg…

HTTP1.0和HTTP2.0的区别

76. HTTP1.0和HTTP2.0的区别 当谈到网络通信协议时&#xff0c;大家都熟悉的就是HTTP&#xff08;Hypertext Transfer Protocol&#xff09;&#xff0c;它是一种用于在 Web 浏览器和服务器之间传输数据的协议。随着技术的发展&#xff0c;HTTP也在不断演进&#xff0c;从HTTP…

Win10连接wifi,微信QQ可以正常登录,但是浏览器不能打开网页解决方法

解决方案&#xff1a; 1&#xff1a;控制面板——> 网络和Internet——>Internet选择 2&#xff1a;选择连接 ——> 局域网设置 3&#xff1a;取消勾选“代理服务器” 4&#xff1a;访问网页即可正常访问。

【问题解决】电脑能用QQ但是打不开网页

问题 如题&#xff0c;自己用手机数据开了热点&#xff0c;让电脑联网&#xff0c;但是只能使用QQ或者微信不能使用浏览器访问网页。 尝试 腾讯电脑管家的工具箱中的电脑诊所中有针对QQ能上网网页不能上网的处理&#xff0c;但是需要重启电脑&#xff0c;而且重启电脑之后虽…

解决Win10能登陆QQ却无法打开网页问题

解决Win10能登陆QQ却无法打开网页问题 问题描述&#xff1a;电脑可以正常登陆QQ但是用浏览器打不开网页&#xff0c;排除网络连接问题&#xff0c;打开网页并进项网络诊断显示&#xff1a;远程计算机或设备不接受连接 解决办法&#xff1a; 1、在桌面按下“win R”快捷键打开…

电脑登陆不了网页的服务器地址,电脑能登qq不能打开网页的解决方法

电脑只能上QQ,不能打开网页的解决方案,如果你曾经遇到过电脑的网络连接正常,可以使用QQ和好友联系,但是不能打开网页的情况,这主要是因为DNS服务器无法正常解析的问题&#xff0c;所以我们要进行手动dns设置。下面小编就为大家介绍电脑能登qq不能打开网页的解决方法&#xff0c…

【Windows】能上QQ却打不开网页(提示未连接到互联网,代理服务器出现问题,或者地址有误。)的解决办法

笔者最近重装完系统之后&#xff0c;突然发现了我的电脑能上QQ却打不开网页&#xff0c;提示信息如下图所示&#xff1a; 这是因为电脑自动打开了代理服务器的原因&#xff0c;手动关闭就能解决&#xff1a; 右键单击电脑右下角的网络图标&#xff0c;选择网络和Internet设置…

电脑可以登录QQ但是却无法打开网页

电脑是WIN10系统&#xff0c;在最近遇到过几次无法登录网页但是能够正常使用QQ的情况&#xff0c;而且使用命令行ping外网解析不出来IP地址&#xff0c;无法ping通&#xff0c;但是如果直接ping相应的IP地址是可以PING通的&#xff0c;如下图&#xff1a; 所以可以确定这是电…