java8-Streamfilter操作:多个List取并集
在项⽬中很容易遇到那种需要取并集或者交集的情况。
如果按照传统的⽅式,使⽤for循环嵌套for循环来操作,也可以实现。但是代码看起来没有那么优雅。
Java8提供了Stream的操作。
例如简单的递归查。
根据当前的分类到相对应的所有⼦级对象。
如果使⽤传统for循环。⼀般的操作⽅式
//查出所有的对象,然后根据对象进⾏判断操作
List<Ojbect> list = new Array<>();
list = service.queryList()
//此处的Object泛指⼀个对象。
java stream
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)).List());
//3、根据下级筛选下下级
List<Entity> thirdleveEntities = allEntities.stream().filter(a -> sencondEntities.stream().map(Entity::getId).List()).ParentId())).List());
这样就可以把所有的下级和下下级都筛选出来了。
说明下,这个只是对于有限下级的操作,对于不确定的和数据集合⼤的,⾛递归可能还是⽐较⽅便⼀些。这个因为数据总量⼩于500;层级只有3级,所以选择了这样的操作。其实很多时候代码是为业务服务的,如果业务有限,没必要考虑通盘的扩展,毕竟性能和扩展性⼀样重要。
后记,整篇⽂章有⽤的代码只有这⼀句,其他都是凑数的。看懂了这⾏,其他的都是⽩搭的。
allEntities.stream().filter(a -> sencondEntities.stream().map(Entity::getId).List()).ParentId())).List())
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论