在项目中很容易遇到那种需要取并集或者交集的情况。

如果按照传统的方式,使用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取并集相关推荐

  1. Java8 Stream流操作在用户系统中的妙用

    在做目前这个项目的时候,发现以前有一个筛选的需求,老程序员是这么做的,先请求Http服务器得到一长串json数据,大概用A4纸打了40多页那么多,然后将这些对象写入到sqlite数据库中,再用数据库查 ...

  2. Java8 stream filter map

    java8 中的stream filter map 组合使用能很好的代替for 循环去处理逻辑,而且代码简单明了 public static void main(String[] args) {Lis ...

  3. Java基础学习总结(132)——Java8 Stream流操作学习总结

    传统的数据处理都是用循环来解决,而不是像搜索数据库那样有具体的搜索语句,而Java8的Stream提供了很好的方案,往往一行就搞定了,而且Stream还可以链式操作,一行代码实现多个循环的功能,代码风 ...

  4. Java8 Stream reduce操作

    Reduce,顾名思义为减少的意思,就是根据指定的计算模型将Stream中的值计算得到一个最终结果.在之前的一篇文章Java8函数式编程中简单介绍,Stream的count.min 和max方法底层都 ...

  5. java8 stream流操作集合交集,差集,并集,过滤,分组,去重,排序,聚合等

    测试对象 public class Person {private String name;private Integer age;private Integer weight;public Pers ...

  6. java8 stream 两个不同对象list取差集

    @Data public class QwWxUserModel {@Idprivate String unionid;/*** 企微qwUserId*/private String qwUserid ...

  7. Java8——Stream流操作List排序_List集合中每个对象元素按时间顺序排序

    一个学生类的实体类 @Data public class Student {private Long id;private String name;private int age;private Do ...

  8. java8 steam常用操作

    java8 stream常用操作 遍历 list.stream().forEach(System.out::println); 获取实体list某个字段集合 list.stream().map(e - ...

  9. java8 stream 的list处理

    目录 1.List<Map>使用map中每一个字符拼接字符串 2.取出list集合对象中某一个属性,生成新的list 3.list集合的排序 ①List(Bean) ②List (Map) ...

  10. java8 Stream流【华为3面】

    华为三面@java8 stream流操作面试题 前言:华为三面考了个很简单的基础编程,就是java8 Stream流操作,太久没写,也是没掌握好java基础直接搞得措手不及,stream两行代码的事情 ...

最新文章

  1. 构造函数,析构函数,对象连的简单应用
  2. (0073)iOS开发之核心动画高级技巧
  3. 如何使自己的程序只运行一次
  4. RPL的故事 ——《x86汇编语言:从实模式到保护模式》读书笔记31
  5. android 解决错误:Intel HAXM is required to run this AVD
  6. 解密多媒体封装解封装框架
  7. linux系统it固定资产管理系统包_固定资产管理系统单机版有哪些特点?
  8. 更改盘符实现文件服务器的特使需求
  9. 安卓发布应用、更新的细节
  10. ARP***原理及解决方法与CMD命令分类(1)
  11. Eureka 微服务注册中心搭建
  12. 起底 Windows 35 年发展史
  13. 8. jQuery 效果 - 动画
  14. Reading query string values in JavaScript
  15. python大众点评霸王餐_大众点评-每天自动抽取霸王餐
  16. 高仿360云盘android端的ui实现,高仿360云盘android端的UI实现
  17. Java--JSON嵌套JSON中带‘\‘字符的解决方式
  18. 周集中团队Nature子刊中网络图布局的R语言可视化复现
  19. 2020.9.8:Spring cloud :install时报错
  20. C#怎么判断是鼠标左键单击还是右键单击?

热门文章

  1. android 隐藏导航栏recent键,Android 去掉导航栏的HOME和RECENT_APP,只保留BACK
  2. MATLAB----其他形式的二维曲线
  3. java.sql.SQLException: 'NaN' is not a valid numeric or approximate numeric value
  4. 解决Dialog在第二次打开时报错的问题
  5. html table边框细线,HTML小技巧将table边框改为细线
  6. 鼠标右键添加powershell和CMD
  7. 联想服务器的厂商信息和产地,联想服务器排名超越华为,居全球第四,网友:第一我们也不需要...
  8. linux方向键ascii_Linux终端下的退格和删除键^H ^? ^[[3~ 杂记
  9. 谷歌信息技术 中国 有限公司和北京谷歌科技有限公司的官司
  10. 面向对象:做好自己,开朗稳重,积极向上,凡事为他人考虑