我要投稿
投诉建议
首页
Web前端
后端技术
数据应用
编程语言
其他语言
技术落地
科技领域
SEO
科技迭代
当前位置:
首页
>
科技观察
面试官问:Stream中的map、peek、foreach方法有什么区别?完全糊涂了……
时间:2023-03-20 15:37:29
科技观察
原代码是这样的:List
children=all.stream().filter(...).map((m)->{m.setChildList(getChildrens(m,all));返回m;}).collect(Collectors.toList());其中,stream使用的map映射其实还是比较推荐把map改成peek的。你可能会有这样的疑问:为什么要把map换成peek?怎么改?map和peek有什么区别?peek和foreach有什么区别?看到这里,你是不是彻底傻眼了,没问题,本文掌柜强势来分析!另外,这些问题在Java程序员的面试过程中是一定要问的。出镜率极高,Java程序员必懂。我也把这些问题整理成了小程序。peekmap和peek都是Stream提供的流处理方法。此方法的存在主要是为了支持调试,您希望在元素流过管道中的某个点时查看元素:如:@Testpublicvoid(){Stream.of("one","two","three","四").filter(e->e.length()>3).peek(e->System.out.println("过滤后的值:"+e)).map(String::toUpperCase).peek(e->System.out.println("Mappedvalue:"+e)).collect(Collectors.toList());}输出结果:Filteredvalue:threeMappedvalue:THREEFilteredvalue:fourMappedvalue:FOUR输出流元素依次过滤和映射后。如果你想在实际工作中看到某个过程的结果,它可以派上用场。可以看出,map接收Function功能接口参数(接收一个参数,返回一个参数),peek接收Consumer功能接口参数(接收一个参数,不返回任何参数)。如果你不明白,请看下面的例子:如果你有如下列表:privateList
languageList=newArrayList
(){{add("java");添加(“蟒蛇”);添加(“C++”);添加(“PHP”);添加(“去”);}};peek方法中的函数式接口参数不能有返回值:表示不能像map一样处理流中的元素,然后形成新的流:peek不能修改流中的元素,只能打印输出或其他外部可以对元素执行处理操作。但是如果流元素是引用类型,peek可以实现map的效果:privateList
userList=newArrayList
(){{add(newUser("张三"));add(newUser("李四"));add(newUser("王舞"));add(newUser("赵六"));}};@Testpublicvoid(){userList.stream().peek(user->user.setName("peek:"+user.getName())).forEach(System.out::println);}输出结果:SteamPeekTest。User(name=peek:张三)SteamPeekTest.User(name=peek:李四)SteamPeekTest.User(name=peek:王五)SteamPeekTest.User(name=peek:赵六)虽然不能返回一个值形成一个新的流,它可以修改引用类型字段的值。这也是为什么fans建议把map换成peek,因为是引用类型,用peek不需要set后return。列表<菜单>子项=全部。溪流()。筛选(...)。map((m)->{m.setChildList(getChildrens(m,all));returnm;}).收集(收集器。toList());修改为:List
children=all.stream().filter(...).peek(m->m.setChildList(getChildrens(m,all))).collect(Collectors.toList());是不是更优雅?比如foreach的源码:和peek一样,也是接收Consumer参数。不同的是foreach不返回参数,也就是说foreach会中断流操作,只能用于遍历,不能进行后续的流处理。小结根据文章中的例子,大家应该已经弄清楚map、peek、foreach的区别和用法了。现在总结一下!map:用于映射流中的每一个元素,然后形成一个新的流;peek:用于调试调试流的中间结果,不能形成新的流,但可以修改引用类型字段的值;foreach:用于遍历会中断流操作;
上一篇:
基于OpenHarmony开发板(拓维Niobe开发板)的环境搭建及烧录过程
下一篇:
版本控制可视化神器Gource:简单易上手,效果恰似烟花秀
面试官问:Stream中的map、peek、foreach方法有什么区别?完全糊涂了……相关文章
HBase面试必备知识点和常见问题解析
HBase面试必备:常见问题及答案解析
MongoDB面试必备:常见问题及答案解析
MongoDB面试指南:常见问题和解答
MongoDB面试题精选:如何应对常见的数据库问题
MongoDB面试题2021:如何应对最常见的数据库问题
MongoDB和MySQL的异同:如何在面试中回答
Redis面试宝典:掌握这些知识点,轻松应对各种问题
Redis缓存的原理和应用场景:常见的面试题解析
Redis面试题精选:你能答对几道?
Springboot如何使用redis stream实现消息
Redis面试必备:常见问题及解答
Redis数据结构的原理与应用:面试必备知识
Redis面试题2023:你必须掌握的10个知识点
Redis面试必备:20道高频问题及答案
Redis常用命令详解:面试必备技巧
Redis的高级特性和常见面试问题解析
Redis在面试中常见的应用场景和问题分析
Redis面试指南:常见问题和答案解析
Redis运维工程师的必备技能:常见面试题解析
最新推荐
1
今年校招云米玩新花样! AI面试官重磅来袭!
2
MOOC的IT技术面试课程助你拿到心仪的offer
3
你接受过机器人面试吗?
4
Stream TV推出65英寸8K裸眼3D显示屏,可实时转换
5
这样的“校园云面试”你见过吗? 2020狐友全国校草大赛海选
6
BOSS直聘发布《2019年人力资本趋势报告》,STREAM
7
2020年互联网春季招聘综述:“云面试”已成主流,百度、腾讯
8
七个第一! 快手StreamLake首款自主研发的智能视频处
9
快手StreamLake助力雨课堂新版本发布,共同打造教育直
10
我有半年的淘宝运营经验,我去面试跨境电商助理,给我开底薪75
猜你喜欢
1
跨境电商面试题及答案?
2
面试官问道:“你找到了9000元,失主说少了1000元,你怎
3
电商面试的优点和缺点是什么?
4
比较软件开发人员的C#面试问题
5
软件开发人员的十大C ++面试问题
6
针对软件开发人员的C#面试问题的提示
7
针对软件开发人员的基本PHP面试问题
8
软件开发人员的常见PHP面试问题
9
探索针对软件开发人员的Java面试问题
10
针对软件开发人员的node.js面试问题的提示
11
将Java面试问题与软件开发人员进行比较
12
你有没有被HR骗去面试,而其实他们公司并不缺人?你的经验是什
13
奥地利公司Streamview推出新款43英寸诺基亚电视 诺
14
在美国亚马逊购买 HP Stream 14 英寸笔记本电脑可
15
在加拿大亚马逊购买 HP Stream 14 英寸笔记本电脑
16
Microsoft 微软更新 Microsoft 365 路
17
当您在德国亚马逊上购买 HP Stream Laptop 笔
18
作为黑色星期五促销的一部分,Roku Streaming T
19
Streamview 推出新款诺基亚 43 英寸电视:4K
20
HBase面试指南:常见问题和解答