使用场景:如当一个用户的菜单发生变更了,不能直接删除全部,重新新增数据。需要判断用户本次操作后哪些是新增的,哪些是不用变的,哪些是需要删除的。
List newList = new ArrayList();//新集合
newList .add(1);
newList .add(2);
newList .add(3);
newList .add(4);
newList .add(4);
List oldList= new ArrayList();//老集合
oldList.add(3);
oldList.add(3);
oldList.add(4);
oldList.add(5);
oldList.add(6);
HashSet<String> newSet = new HashSet<>(newList);//新集合去重
HashSet<String> delSet = new HashSet<>(oldList);//老集合去重
oldList.retainAll(newSet);
log.info("交集后结果:" + oldList);
delSet .removeAll(oldList);
log.info("减去交集后结果为需要删除的:" + delSet);
newSet .removeAll(oldList);
log.info("减去交集后结果为需要新增的:" + newSet);
newRole.forEach(s -> insert(s));//执行插入
delRole.forEach(s -> delete(s));//执行删除
运行打印结果如下:
[main] INFO com.p5w.unifiedlogin.SignUtil - new:[1, 2, 3, 4, 4]
[main] INFO com.p5w.unifiedlogin.SignUtil - old:[3, 3, 4, 5, 6]
[main] INFO com.p5w.unifiedlogin.SignUtil - 交集后结果:[3, 3, 4]
[main] INFO com.p5w.unifiedlogin.SignUtil - 减去交集后结果为需要删除的:[5, 6]
[main] INFO com.p5w.unifiedlogin.SignUtil - 减去交集后结果为需要新增的:[1, 2]