java8-Stream filter操作:多个List取并集
在项目中很容易遇到那种需要取并集或者交集的情况。
如果按照传统的方式,使用for循环嵌套for循环来操作,也可以实现。但是代码看起来没有那么优雅。
Java8提供了Stream的操作。
例如简单的递归查找。
根据当前的分类找到相对应的所有子级对象。
如果使用传统for循环。一般的操作方式
//查出所有的对象,然后根据对象进行判断操作
List<Ojbect> list = new Array<>();
list = service.queryList()
//此处的Object泛指一个对象。
for(Object obj:list){
//TODO
//查找所有parentId=当前ID的数据,再判断是否还存在下级
//。。。。。。
}
Stream的操作方式比较简单。
如下:
//1、将所有的List数据进行筛选,然后根据筛选出来的数据进行并集操作List<Entity> allEntities = service.querylist();//2、筛选下级
List<Entity> sencondEntities = allEntities.parallelStream().filter(s -> s.getParentCid()==id)).collect(Collectors.toList());//3、根据下级筛选下下级List<Entity> thirdleveEntities = allEntities.stream().filter(a -> sencondEntities.stream().map(Entity::getId).collect(Collectors.toList()).contains(a.getParentId())).collect(Collectors.toList());
这样就可以把所有的下级和下下级都筛选出来了。
说明下,这个只是对于有限下级的操作,对于不确定的和数据集合大的,走递归可能还是比较方便一些。这个因为数据总量小于500;层级只有3级,所以选择了这样的操作。其实很多时候代码是为业务服务的,如果业务有限,没必要考虑通盘的扩展,毕竟性能和扩展性一样重要。
后记,整篇文章有用的代码只有这一句,其他都是凑数的。看懂了这行,其他的都是白搭的。
allEntities.stream().filter(a -> sencondEntities.stream().map(Entity::getId).collect(Collectors.toList()).contains(a.getParentId())).collect(Collectors.toList())
java8-Stream filter操作:多个List取并集相关推荐
- Java8 Stream流操作在用户系统中的妙用
在做目前这个项目的时候,发现以前有一个筛选的需求,老程序员是这么做的,先请求Http服务器得到一长串json数据,大概用A4纸打了40多页那么多,然后将这些对象写入到sqlite数据库中,再用数据库查 ...
- Java8 stream filter map
java8 中的stream filter map 组合使用能很好的代替for 循环去处理逻辑,而且代码简单明了 public static void main(String[] args) {Lis ...
- Java基础学习总结(132)——Java8 Stream流操作学习总结
传统的数据处理都是用循环来解决,而不是像搜索数据库那样有具体的搜索语句,而Java8的Stream提供了很好的方案,往往一行就搞定了,而且Stream还可以链式操作,一行代码实现多个循环的功能,代码风 ...
- Java8 Stream reduce操作
Reduce,顾名思义为减少的意思,就是根据指定的计算模型将Stream中的值计算得到一个最终结果.在之前的一篇文章Java8函数式编程中简单介绍,Stream的count.min 和max方法底层都 ...
- java8 stream流操作集合交集,差集,并集,过滤,分组,去重,排序,聚合等
测试对象 public class Person {private String name;private Integer age;private Integer weight;public Pers ...
- java8 stream 两个不同对象list取差集
@Data public class QwWxUserModel {@Idprivate String unionid;/*** 企微qwUserId*/private String qwUserid ...
- Java8——Stream流操作List排序_List集合中每个对象元素按时间顺序排序
一个学生类的实体类 @Data public class Student {private Long id;private String name;private int age;private Do ...
- java8 steam常用操作
java8 stream常用操作 遍历 list.stream().forEach(System.out::println); 获取实体list某个字段集合 list.stream().map(e - ...
- java8 stream 的list处理
目录 1.List<Map>使用map中每一个字符拼接字符串 2.取出list集合对象中某一个属性,生成新的list 3.list集合的排序 ①List(Bean) ②List (Map) ...
- java8 Stream流【华为3面】
华为三面@java8 stream流操作面试题 前言:华为三面考了个很简单的基础编程,就是java8 Stream流操作,太久没写,也是没掌握好java基础直接搞得措手不及,stream两行代码的事情 ...
最新文章
- 构造函数,析构函数,对象连的简单应用
- (0073)iOS开发之核心动画高级技巧
- 如何使自己的程序只运行一次
- RPL的故事 ——《x86汇编语言:从实模式到保护模式》读书笔记31
- android 解决错误:Intel HAXM is required to run this AVD
- 解密多媒体封装解封装框架
- linux系统it固定资产管理系统包_固定资产管理系统单机版有哪些特点?
- 更改盘符实现文件服务器的特使需求
- 安卓发布应用、更新的细节
- ARP***原理及解决方法与CMD命令分类(1)
- Eureka 微服务注册中心搭建
- 起底 Windows 35 年发展史
- 8. jQuery 效果 - 动画
- Reading query string values in JavaScript
- python大众点评霸王餐_大众点评-每天自动抽取霸王餐
- 高仿360云盘android端的ui实现,高仿360云盘android端的UI实现
- Java--JSON嵌套JSON中带‘\‘字符的解决方式
- 周集中团队Nature子刊中网络图布局的R语言可视化复现
- 2020.9.8:Spring cloud :install时报错
- C#怎么判断是鼠标左键单击还是右键单击?
热门文章
- android 隐藏导航栏recent键,Android 去掉导航栏的HOME和RECENT_APP,只保留BACK
- MATLAB----其他形式的二维曲线
- java.sql.SQLException: 'NaN' is not a valid numeric or approximate numeric value
- 解决Dialog在第二次打开时报错的问题
- html table边框细线,HTML小技巧将table边框改为细线
- 鼠标右键添加powershell和CMD
- 联想服务器的厂商信息和产地,联想服务器排名超越华为,居全球第四,网友:第一我们也不需要...
- linux方向键ascii_Linux终端下的退格和删除键^H ^? ^[[3~ 杂记
- 谷歌信息技术 中国 有限公司和北京谷歌科技有限公司的官司
- 面向对象:做好自己,开朗稳重,积极向上,凡事为他人考虑