public <T extends Comparable<T>> Map<String, List<T>> diffCollections(List<T> oldList, List<T> newList) {
// 将列表转换为集合,以便进行高效的查找操作
Set<T> oldSet = new HashSet<>(oldList);
Set<T> newSet = new HashSet<>(newList);
// 从新集合中找出老集合中没有的元素,即添加的元素
List<T> added = new ArrayList<>(newSet);
added.removeAll(oldSet);
// 从老集合中找出新集合中没有的元素,即删除的元素
List<T> removed = new ArrayList<>(oldSet);
removed.removeAll(newSet);
// 遍历新集合,找出在老集合中存在但已修改的元素
// 注意:此处简化的假设修改的元素是完全匹配的,实际中可能需要更复杂的比较逻辑
List<T> modified = new ArrayList<>();
for (T newItem : newList) {
if (!oldSet.contains(newItem)) {
continue; // 新增的元素跳过
}
T oldItem = oldSet.stream().filter(old -> old.equals(newItem)).findFirst().orElse(null);
if (oldItem != null && !oldItem.equals(newItem)) {
// 根据实际需要定义equals和hashCode,或直接比较字段来判断是否修改
modified.add(newItem);
}
}
// 构建结果映射表,包含添加、删除和修改的元素列表
Map<String, List<T>> result = new HashMap<>(3);
result.put("added", added);
result.put("removed", removed);
result.put("modified", modified);
return result;
}
一对多修改,判断哪些元素被修改(自用)
最新推荐文章于 2024-07-22 14:15:06 发布