更新操作时,数据库的数据是一个集合A,请求更新的集合是B,那么如何找出更新的集合中的新增元素和删除元素呢?
例如
A | B |
---|---|
1 | 1 |
2 | 空 |
3 | 3 |
4 | 4 |
空 | 5 |
A是原来的集合,B是后来的集合。
可见B删除了2,并增加了5。
找新增: 遍历B,A不包含的元素为新增元素
找删除: 遍历A,B不包含的元素为删除元素
HashSet<Long> idsOnDb = new HashSet<>();
idsOnDb.add(1l);
idsOnDb.add(2l);
idsOnDb.add(3l);
idsOnDb.add(4l);
HashSet<Long> idsOnHttp = new HashSet<>();
idsOnHttp.add(1l);
idsOnHttp.add(3l);
idsOnHttp.add(4l);
idsOnHttp.add(5l);
// 新增的用户id集合
List<Long> idsAdd = idsOnHttp
.stream()
// 筛选新增的,在数据库的集合中没有找到的即为新增的
.filter(idUpdate -> !idsOnDb.contains(idUpdate))
.collect(Collectors.toList());
// 删除的角色id集合
List<Long> idsDeleted = idsOnDb
.stream()
.distinct()
.filter(idOnDb -> !idsOnHttp.contains(idOnDb))
.collect(Collectors.toList());