比较两个列表以了解更新、删除和添加

2022-09-03 08:42:08

简单的问题。

我有一个新列表和一个旧列表。在Java中,是否有一种标准的方式/库允许我比较这两个列表并确定哪些项目已被更新/删除或是全新的?例如,我最终应该得到三个列表 - 已删除的项目(旧的项目,但不是新的项目),更新的项目(两者中的项目),新项目(新的和不是旧的项目)。

我可以自己写这个,但想知道是否有一种标准的方法可以做到这一点。

列表实现中的对象正确等于。


答案 1

没有标准的方式抱歉。但是,您可以使用标准JDK相当容易地做到这一点,而无需诉诸于对Apache Commons的依赖(正如其他人所建议的那样)。假设您的列表是 List<T> 实例:

List<T> oldList = ...
List<T> newList= ...

List<T> removed = new ArrayList<T>(oldList);
removed.removeAll(newList);

List<T> same = new ArrayList<T>(oldList);
same.retainAll(newList);

List<T> added = new ArrayList<T>(newList);
added.removeAll(oldList);

答案 2

标准库中没有任何内容。

但是,Apache Commons CollectionUtils 类通过交集和减法方法为您提供了此功能:

Collection<T> old = ...;
Collection<T> neww = ...;

Collection<T> deleted = (Collection<T>)CollectionUtils.subtract(old, new);
Collection<T> updated = (Collection<T>)CollectionUtils.intersection(old, new);
Collection<T> newResult = (Collection<T>)CollectionUtils.subtract(new, old);

(您需要(未选中的)强制转换,因为 CollectionUtils 未生成。