java8 list 去重_Java8-Stream在集合中的8种应用案例

前言

Java8新特性我们使用的应该比较多了,今天这里整理了个人使用最多的8种场景,希望对大家有所帮助。

fed75478a0b85b79b01ec09b1aaee64c.png

Java Stream在集合中的运用案例

遍历

遍历也许是我们使用最多的功能了,在Java8之前我们遍历集合通常会采用for循环,迭代器,而在Java8中有了更加简介的方法:

 public static void main(String[] args) { List list = new ArrayList<>(); EmailModal email = new EmailModal(); email.setTitle("邮件名称"); list.add(email) //方式一:普通流 list.stream().forEach(emailModal -> { System.out.println(emailModal); System.out.println(emailModal.getTitle()); }); //方式二:并行流 list.parallelStream().forEach(emailModal -> { System.out.println(emailModal); System.out.println(emailModal.getTitle()); }); }

方式二中,相当于使用了多线程去并行遍历,系统会根据运行服务器的资源占用情况自动进行分配。也正是因为并行流采用了多线程的方式去遍历数据,所以我们需要注意以下两点(自己遇到的坑,可能还会有其他的坑我没有发现):

1.避免在并行流中使用线程不安全的对象,比如ArrayList

2.主线程中ThreadLocal存储的线程局部变量,不能再并行流中获取

过滤

我们经常需要将集合中一些数据进行过滤,比如过滤集合中负数,过滤一些权限相关数据,在Java8之前我们更多的是使用迭代器进行remove操作,在Java8中有了两种更加简介的方法,其一:利用Collection的removeIf方法;其二:利用Stream的filter方法。

 public static void main(String[] args) { List list = new ArrayList<>(); EmailModal email = new EmailModal(); email.setHtml(true); EmailModal email2 = new EmailModal(); email2.setHtml(false); list.add(email); list.add(email2); //removeIf方法过滤html为false的对象 list.removeIf(emailModal -> !emailModal.isHtml()); //filter方法过滤掉html为true的对象 list = list.stream().filter(emailModal -> !emailModal.isHtml()).collect(Collectors.toList()); list.stream().forEach(emailModal -> { System.out.println(emailModal); System.out.println(emailModal.isHtml()); }); }

对于上面两种方法,我们需要区分一下,首先removeIf会将表达式中返回true的元素过滤掉,filter方法会将表达式中返回true的元素保留下来,两者是相反的。其次使用stream的filter方法过滤数据,如果想对List生效,则必须使用collect方法让list接收。

去重

去重我们经常也会使用到,对集合了解程度的不同,我们会使用不同的方法,比如最简单的方法遍历数据,使用新的空集合接受数据,利用contains方法判断是否在新集合中add元素,其次就是使用HashSet,我们不判断直接将元素放到Set中,利用集合的特效去重。但是在Java8中有更加简洁的方案,方案一:我们可以利用distinct()方法实现,如果去重元素不是基本类型而是对象的话,需要重写hashcode和equals方法,否则会去重失败。方案二:利用filter配合HashSet去除重复元素,set新增元素如果重复会返回false,刚好配合filter过滤false的特效

 public static void main(String[] args) { List list = new ArrayList<>(); list.add("1"); list.add("2"); list.add("1"); //方案一 list.stream().distinct().forEach(s -> { System.out.println(s); }); //方案二 list.stream().filter(distinctByKey(String::trim)).forEach(s -> { System.out.println(s); }); } private static  Predicate distinctByKey(Function super T, ?> keyExtractor) { Set seen = ConcurrentHashMap.newKeySet(); return t -> seen.add(keyExtractor.apply(t)); }

匹配

匹配数据也是我们常用的操作,比如我们需要在集合中找到属性ID为10的对象,将其取出,Java8之前我们通常会遍历集合,使用if判断,然后匹配到使用break跳出循环,但是在Java8中,我们可以使用anyMatch达到相同的效果。

 public static void main(String[] args) { List list = new ArrayList<>(); EmailModal email = new EmailModal(); email.setHtml(true); EmailModal email2 = new EmailModal(); email2.setHtml(true); list.add(email); list.add(email2); list.stream().anyMatch(emailModal -> { if (emailModal.isHtml()) { System.out.println(emailModal.isHtml()); //其他逻辑 return true; } return false; }); }

拼接

开发接口的时候,前端会存在传递使用某个符号(逗号)隔开的字符串,我们通常会将其转换为集合,作为批量查询的条件。或者我们需要将集合转换为逗号隔开的字符。

 String ids= "1,2,3,4,5,6"; //转集合 List listIds = Arrays.asList(ids.split(

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

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

相关文章

springboot——热部署

一、手动启动热部署 在进行 Spring Boot 的 Web 项目开发中&#xff0c;我们经常会遇到源代码文件、 配置文件等的修改&#xff0c;但每次修改后都会重启 Web 服务器才能修改后的文件生效&#xff0c; 这样很耗时&#xff0c;影响开发效率。而热部署就是不需要重启 Web 服务器就…

(转载)ubuntu开启SSH服务

&#xff08;转载&#xff09; http://www.cnblogs.com/xiazh/archive/2010/08/13/1798844.htmlSSH分客户端openssh-client和openssh-server如果你只是想登陆别的机器的SSH只需要安装openssh-client&#xff08;ubuntu有默认安装&#xff0c;如果没有则sudo apt-get install op…

c++邮递员投递经过特定点_厉害了斑马鱼,动物实验体天团C位

明明是一条鱼&#xff0c;为什么在保健食品以及药品领域即将成为实验动物C位&#xff1f;越来越多的药品及保健食品企业&#xff0c;都想邀请它们成为座上宾&#xff0c;是时候展示真正的技术了&#xff01;透明就是很厉害斑马鱼从胚胎阶段至未来的成熟阶段&#xff0c;身体中有…

选了combobox里的选项后没激发change事件_备胎测试:来测测你被备胎了没?

很多人在感情里被备胎而不自知&#xff0c;今天就来教大家如何辨别备胎。你知道备胎的最大特征是什么吗&#xff1f;是在面对关系定位时&#xff0c;态度上的模棱两可。想想你身边养备胎的人&#xff0c;如果没有的话&#xff0c;想想电视剧或小说里养备胎的人&#xff0c;想想…

halcon旋转后坐标_FPGA大赛【八】具体模块设计图像旋转方案

【注】该项目是我们团队参加2019届全国大学生FPGA大赛的作品&#xff0c;系统主要实现视频任意角度旋转。该项目最终晋级决赛&#xff0c;并获得紫光同创企业特别奖。该系列文章介绍我们团队的作品。关注公众号“数字积木”对话框回复 FPGA2019 &#xff0c;即可获得该项目的工…

hashmap value占用空间大小_HashMap的put和get实现原理及源码分析

水平有限&#xff0c;难免会有疏漏之处&#xff0c;如有错误&#xff0c;还请指出&#xff0c;感谢&#xff01;前言HashMa是Java中最常用的集合类框架&#xff0c;也是Java语言中非常典型的数据结构&#xff0c;同时也是我们需要掌握的数据结构&#xff0c;更重要的是进大厂面…

c#sql防注入模糊查询_SQL中利用LIKE实现模糊查询的功能

大家好&#xff0c;今日继续讲解《VBA数据库解决方案》&#xff0c;今日讲解的内容是&#xff1a;利用ADO,实现模糊查询。在上一讲中&#xff0c;我们实现了利用ADO快速查找的功能&#xff0c;今日我们实现工作表中模糊查找的功能。我们仍是利用上一讲的数据实现, 在"两表…

idea断点_IDEA Debug 无法进入断点的解决方法

前言某个多模块项目中使用多个版本的 Spring&#xff0c;如 Spring 4&#xff0c;Spring 5&#xff0c;在使用 IDEA Debug 过程中发现&#xff0c;Spring 部分 jar 如 spring-core 中的上面断点&#xff0c;IDEA 可以成功进入。但是有部分如 spring-context IDEA 始终无法进入断…

win10taskkill无法终止进程_Win10无法终止进程拒绝访问

用任务管理器强制结束一些已经不使用程序的进程&#xff0c;是很多用户会用的功能之一&#xff0c;但是最近有使用win10系统的用户&#xff0c;遇到结束进程的时候&#xff0c;被拒绝访问。遇到这样的问题&#xff0c;给大家带来了这篇文章的方法&#xff0c;希望能帮助到大家。…

python 线程池_老程序员的经验分享:Python 从业十年是种什么体验?

出于某些原因&#xff0c;想记录一下我过去数年使用 Python 的经验和一些感悟。毕竟算是一门把我带入互联网行业的语言&#xff0c;而我近期已经几乎不再写 Py 代码&#xff0c; 做一个记录&#xff0c;也许会对他人起到些微的帮助&#xff0c;也算是纪念与感恩了。作者&#x…

练字格子纸模板pdf_高考英语作文模板(总结八种常考题型,配合例文,纯手打的)...

又是一年高考结束&#xff0c;又有不少新高三的学弟学妹问我一些学习上的方法。额&#xff0c;今天我们就单说这个英语作文。英语作文第一件事练字&#xff0c;其次背模板。高考无非就几种信件变着花考察。几种基本信件模板稍加变通就可以很简单完成作文。本人2019年河南考生&a…

GCC 提供的原子操作

gcc从4.1.2提供了__sync_*系列的built-in函数&#xff0c;用于提供加减和逻辑运算的原子操作。其声明如下&#xff1a;type __sync_fetch_and_add (type *ptr, type value, ...) type __sync_fetch_and_sub (type *ptr, type value, ...) type __sync_fetch_and_or (type *ptr,…

google js cdn_「效率工具」模拟CDN的浏览器扩展程序,改善在线隐私

更多互联网新鲜资讯、工作奇淫技巧关注原创【飞鱼在浪屿】(日更新)LocalCDN是一个Web浏览器扩展&#xff0c;它模仿Content Delivery Networks以改善在线隐私。它拦截流量&#xff0c;在本地找到静态资源&#xff0c;然后将其注入环境。所有这些都是自动发生的&#xff0c;因此…

如何保证战略落地_如何让战略落地:流程管理的道法术器让战略落地提升竞争力...

从0开始学管理&#xff1a;专注科学系统提升管理能力&#xff1a;基础 中层 高层 综合管流程革命一、流程理念流程六要素&#xff1a;客户 、活动间的关系 、活动 、输出 、输入 、价值二、流程浮现什么是端到端的流程&#xff1a;业务全程闭环 、从开始到结束 、从发起到完成 …

elf文件格式_elf文件,readelf

汽车电子开发过程中&#xff0c;代码完成后&#xff0c;程序编译完成 会生成 elf文件 或 hex文件&#xff0c;可以烧录到MCU中调试&#xff0c;那么究竟什么是 elf文件呢&#xff1f; elf 文件中又包含哪些信息&#xff1f; 如何解析 elf文件呢?1. What is elf fileELF(Execut…

是人是谁_其实,我们每个人心中都有一把尺子,谁好谁歹谁心里都明白……

有一些人&#xff0c;对别人有一点好&#xff0c;就能整天挂在嘴边&#xff0c;生怕别人能忘了似的&#xff0c;还有一些人&#xff0c;对谁好&#xff0c;都不喜欢说在嘴上&#xff0c;就愿意那么默默无闻地善良着&#xff0c;把温暖悄悄传递给别人的心灵&#xff0c;这是我们…

是否要运行此应用程序_使用Delve调试Go应用程序

调试器任何编程语言中最简单的调试形式是使用打印语句或日志来写入标准输出。这肯定没有问题&#xff0c;但是当我们的应用程序规模增加并且逻辑变得更加复杂时&#xff0c;这种方式变得极其困难。将打印语句添加到应用程序的每个代码路径并不容易。这是调试器派上用场的地方。…

mysql5.7.18压缩包下载_Windows安装MySQL5.7教程

我们日常学习可能会需要在本地安装MySQL服务&#xff0c;也遇到过小伙伴探讨关于Windows系统安装MySQL的问题。在这里建议大家安装MySQL5.7版本&#xff0c;当然想尝试8.0版本的同学也可以参考安装。本篇文章以MySQL5.7.23版本为例&#xff0c;一步步的为大家总结出安装步骤&am…

pentaho DI--- Tutorial (spoon)

Pentaho Data Integration (PDI, also called Kettle),是pentaho的etl工具.虽然etl工具一般都用在数据仓库环境中,可是,PDI还是可以做以下事情: 1)在数据库或应用系统间迁移数据. 2)把数据导成为检系统 3)大数据的批量倒入数据库。 4&#xff09;系统整合。 5&#xff09;数据清…

linux 系统调用

5.1.5 如何使用系统调用 如图5.2所示&#xff0c;用户应用可以通过两种方式使用系统调用。第一种方式是通过C库函数&#xff0c;包括系统调用在C库中的封装函数和其他普通函数。 图5.2 使用系统调用的两种方式 第二种方式是使用_syscall宏。2.6.18版本之前的内核&#xff0…