java list 凑数_java8-Stream filter操作:多个List取并集

java8-Stream filter操作:多个List取并集

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

如果按照传统的方式,使用for循环嵌套for循环来操作,也可以实现。但是代码看起来没有那么优雅。

Java8提供了Stream的操作。

例如简单的递归查找。

根据当前的分类找到相对应的所有子级对象。

如果使用传统for循环。一般的操作方式

//查出所有的对象,然后根据对象进行判断操作

ListOjbect list = new Array();

list = service.queryList()

//此处的Object泛指一个对象。

for(Object obj:list){

//TODO

//查找所有parentId=当前ID的数据,再判断是否还存在下级

//。。。。。。

}

Stream的操作方式比较简单。

如下

//1、将所有的List数据进行筛选,然后根据筛选出来的数据进行并集操作

ListEntity allEntities = service.querylist();

//2、筛选下级

ListEntity sencondEntities = allEntities.parallelStream().filter(s - s.getParentCid()==id)).collect(Collectors.toList());

//3、根据下级筛选下下级

ListEntity 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取并集 相关文章

JavaScript(3)

6、操作BOM对象(重点) 浏览器介绍 JavaScript和浏览器关系 JavaScript诞生就是为了能够让他在浏览器中运行! BOM:浏览器对象模型 浏览器内核: IE 6~11 Chrome SAfari FireFox 第三方浏览器(使用上述内核): QQ浏览器 360浏览器 window (重要) window

邮件发送定时操作

1邮件发送 1.1编写配置文件 #QQ邮箱spring.mail.username=2082620872@qq.com#密码spring.mail.password=rntexrvtuhmvefia#固定的spring.mail.host=smtp.qq.com#开启加密验证spring.mail.properties.mail.smtp.ssl.enable=true 1.2导入依赖 dependency groupI

第一章---线性表之单链表的操作

#include iostream#include stdlib.husing namespace std;typedef int DataType; //使int重命名为DataType DataType flag = 0; //flag是用来判断神魔时候输入数据结束 typedef struct Lnode{DataType data; //定义DataType为int ,存储结构为顺序存储 struct

hdfs - 操作之API

1.HDFS 客户端环境准备 (1)根据自己电脑的操作系统拷贝对应的编译后的 hadoop jar 包到非中文路径(例如:D:\Develop\hadoop-2.7.2) (2)配置 HADOOP_HOME 环境变量 (3)配置 Path 环境变量 2. 创建工程 (1)创建一个 Maven 工程 HdfsClientDemo (2)

【转】Selenium - Web自动化测试的基本操作实现

摘要: 之前用Selenium做UI自动化测试从初学到熟练碰到过很多问题,这里就不一一细说了,所以把最基本的操作都写在了一起,包括:控制浏览器, 操作元素,鼠标事件,键盘事件,设置元素等待,多表单/窗口切换,警告框处理,上传文件,操作Cookie,调用JavaScr

C# 对mysql 操作的封装

最近写了一个类,实现了对mysql数据库的基本操作的封装。有需要的可以拿去。先上效果,另外有问题可以自己修改或者联系。 数据库结构: 一:效果 1.1原数据表 1.2:连接数据库 MySQLBase sqlbase = new MySQLBase("test", "localhost", "root", "Zhong123456

js数组的map,filter...方法

在项目中经常用到的就是这几个,个人频繁用到最多的就是map。 map map也就是映射,是一一对应的关系,返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。 let arr = [54,66,34,99,60]; let arr2 = arr.map(item ={return item=60 '及格' : '不

django文档总结之基本操作(1)

基本操作 基本准备 终端创建项目: django-admin startproject 项目名称 pycharm中选择django创建项目 ptcharm下终端创建子应用: python manage.py startapp users(子应用名) pycharm下终端项目运行: python manage.py runserver (ip端口,默认8000) settin

制作局域yum源(至少有两个虚拟机)

节点一的操作 制作本地yum源 挂载镜像文件 mount -o loop /CentOS-6.9-x86_64-bin-DVD1.iso /mnt/cdrom/ 设置镜像文件开机自挂载 vi /etc/fstab/CentOS-6.9-x86_64-bin-DVD1.iso /mnt/cdrom iso9660 defaults,ro,loop 0 0 进入 cd /etc/yum.repos.d/ 目录, 创

HDFS的API操作

1、获取FileSystem对象 /** * 获取FileSystem对象 * @return * @throws URISyntaxException * @throws IOException * @throws InterruptedException */ private FileSystem getFs() throws URISyntaxException, IOException, InterruptedException { Configu

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值