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);


posted @ 2024-03-21 09:47  寒冷的雨呢  阅读(33)  评论(0编辑  收藏  举报