【Java8】===两个List集合取交集、并集、差集
2021-01-25 13:16
标签:lambda 表达式 高级 sys dal string each stream core 业务场景:根据用户查询权限,入参:UserCode,lastQueryTime(上次查询时间),出参:权限变化的列表。 原逻辑处理方法:循环currList,如果oldList中不包含即为增加的权限列表,反之,循环oldList,如果currList中不包含即为移除的权限列表,代码如下(简略写没运行,比较笨拙): 【Java8】===两个List集合取交集、并集、差集 标签:lambda 表达式 高级 sys dal string each stream core 原文地址:https://www.cnblogs.com/qingmuchuanqi48/p/12861320.html
oldList(上次查询到的权限列表),currList(当前查询到的权限列表),比对两个list找出:移除和增加的权限加以标识(1--增加,-1--删除)返回。//之前写的已经删了手动打下(add处有问题应该用map,将就着看吧)
List
用Java8中的 lambda表达式处理:
//AppAuths返回的变化列表
// 移除权限:上次与当前的权限取差集 (oldAppPrivileges - currAppPrivileges)
List removePrivileges = oldAppPrivileges.stream()
.filter(oldPrivilege ->!currAppPrivileges.contains(oldPrivilege)).collect(toList());
removePrivileges.parallelStream().forEachOrdered(removePrivilege ->
appAuths.add(new AppAuths(removePrivilege, "-1")));
// 增加权限:当前与上次的权限取差集 (currAppPrivileges - oldAppPrivileges)
List addPrivileges = currAppPrivileges.stream()
.filter(currPrivilege ->!oldAppPrivileges.contains(currPrivilege)).collect(toList());
addPrivileges.parallelStream().forEachOrdered(addPrivilege ->
appAuths.add(new AppAuths(addPrivilege, "1")));
逻辑其实是一样的,但下面的代码会给人一种高级的感觉(个人认为),性能方面下面的要好很多。
下面是:两个List集合取交集、并集、差集、去重并集的一个简单Demo,可供参考:
package com.ymdd.galaxy.appmanage.core.appauth.service;
import java.util.ArrayList;
import java.util.List;
import static java.util.stream.Collectors.toList;
public class Test {
public static void main(String[] args) {
List
下一篇:JSX本质
文章标题:【Java8】===两个List集合取交集、并集、差集
文章链接:http://soscw.com/index.php/essay/46820.html