如何比较java中包含同一类对象的两个ArrayList?

jk9hmnmh  于 2021-06-30  发布在  Java
关注(0)|答案(4)|浏览(360)

我有两个不同大小的清单,属于同一个 class Officer 具有以下属性:

Integer id;
Integer level; 
String role;

我想比较这两个列表list1和list2,以便生成两个新的列表insertlst和deletelist。
列表1和列表2都包含唯一的元素。
insertlst:此列表包含list1中的项,而不包含list2中的项。
deletelist:此列表包含列表2中的项,而不包含列表1中的项。
我不知道该怎么做,可能是使用org.apache.commons.collections.collectionutils api。
你能给我推荐一个生成这两个列表insertlst和deletelist的java代码吗?

kyvafyod

kyvafyod1#

如果您想使用org.apache.commons.collections.collectionutils,那么应该使用subtract方法。

Collection<Officer> insertList= CollectionUtils.subtract(list1, list2);
Collection<Officer> deleteList = CollectionUtils.subtract(list2, list1);

或者您可以这样编写(传递方法中填充的空列表)以不向依赖项添加另一个库:

static <T> void process(List<T> list1, List<T> list2, List<T> insertList, List<T> deleteList) {
    for (T t: list1) {
        if (!list2.contains(t)) {
            insertList.add(t);
        }
    }
    for (T t: list2) {
        if (!list1.contains(t)) {
            deleteList.add(t);
        }
    }
}

别忘了在这两种情况下重写equals和hashcode方法。请参阅这里的解释

vojdkbi0

vojdkbi02#

确保您的 Officer 类重写 equals() (和 hashCode() )方法,它将非常简单:

List<Officer> list1 = ... // your list1
List<Officer> list2 = ... // your list2
List<Officer> insertLst = new ArrayList<>(list1);
insertLst.removeAll(list2);
List<Officer> deleteList= new ArrayList<>(list2);
deleteList.removeAll(list1);
ecfdbz9o

ecfdbz9o3#

final List<Officer> one = new ArrayList<Officer>();
...
final List<Officer> two = new ArrayList<Officer>();
...
final List<Officer> insertList = new ArrayList<Officer>(one);
insertList.removeAll(two);
final List<Officer> removeList = new ArrayList<Officer>(two);
removeList.removeAll(one);

编辑:正如jlordo所说,确保重写hashcode和equals

fruv7luv

fruv7luv4#

你必须循环浏览这两个列表。。。。
一种方法是:

ArrayList <Officer> list1= ....
ArrayList <Officer> list2= ....
ArrayList <Officer> insertList= new  ArrayList <Officer>();
ArrayList <Officer> deleteList= new  ArrayList <Officer>();

for(Officer x:list1){
  for(Officer y:list2){
     //business logic here
     if(x.id==y.id){
       insertList.add(x); //example code to add an Object in a List
     }
  }
}

业务逻辑部分由您决定。。。你可以比较两个列表之间的数据,并决定什么去哪里。。。
希望这有帮助

相关问题