java 差异删除 差异更新与删除 差集
public boolean relation(Long projectId, List<BsMemberEntity> members) {
//1)、获取原关联数据
List<ProProjectAuthorEntity> oldList = this.findByProjectId(projectId);
List<Long> oldMemberIds = oldList.stream().map(item -> {
return item.getMemberId();
}).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(members)) {
List<ProProjectAuthorEntity> newList = members.stream().map(item -> {
ProProjectAuthorEntity entity;
//是否是原有存在的人员
if (CollectionUtil.contains(oldMemberIds, item.getId())) {
entity = oldList.stream().filter(el -> el.getMemberId().equals(item.getId())).findFirst().get();
} else {
entity = new ProProjectAuthorEntity();
entity.setProjectId(projectId);
entity.setMemberId(item.getId());
entity.setUserId(item.getUserId());
}
entity.setPower(item.getDescription());//此处使用人员描述字段代传
return entity;
}).collect(Collectors.toList());
//1)、保存数据
this.saveOrUpdateBatch(newList);
//2)、去除差异数据
Collection<Long> subtract = CollectionUtil.subtract(oldList, newList).stream().map(item -> {
return item.getId();
}).collect(Collectors.toList());
this.removeBatchByIds(subtract);
}else{
this.removeBatchByIds(oldList);
}
return true;
}
https://www.cnblogs.com/hungryquiter/p/17049901.html
//在Java中,没有直接的subtract方法可以用于集合操作。但是,你可以使用removeAll方法来实现集合的减法操作。
//假设你有两个集合set1和set2,你想要得到set1与set2之间的差集,即set1 - set2,你可以这样做:
Set<Type> set1 = new HashSet<>(Arrays.asList(/* 初始元素列表 */));
Set<Type> set2 = new HashSet<>(Arrays.asList(/* 初始元素列表 */));
// 移除set1中所有也包含在set2中的元素
set1.removeAll(set2);
// 此时set1中的元素就是原始set1与set2之间的差集
//如果你需要得到set2中不存在于set1中的元素,即set2 - set1,你可以在set2上执行相同的操作:
set2.removeAll(set1);
择善人而交,择善书而读,择善言而听,择善行而从。