如何比较两个对象数组以删除重复项?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何比较两个对象数组以删除重复项?相关的知识,希望对你有一定的参考价值。

我正在使用两个对象数组来删除重复的对象。

我有Class1.java的array1

String name;
String number;

我添加了如下对象:

list1.add(new Class1("name1","number1"));
list1.add(new Class1("name2","number2"));
list1.add(new Class1("name3","number3"));
list1.add(new Class1("name4","number4"));

list2.add(new Class1("name1","number1"));
list2.add(new Class1("name5","number2"));
list2.add(new Class1("name6","number3"));
list2.add(new Class1("name2","number4"));

现在我想在名称的基础上比较list1和list 2。在与列表2进行比较后,如何从list1中删除重复元素。

答案

您可以使用list1方法删除list2上存在的removeAll中的元素。首先,您必须覆盖类中的equals和hashCode方法:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof Class1)) return false;

    Class1 class1 = (Class1) o;

    return name.equals(class1.name);
}

@Override
public int hashCode() {
    return name.hashCode();
}

然后添加元素后,只需使用方法removeAll,如下所示:

list1.add(new Class1("name1","number1"));
list1.add(new Class1("name2","number2"));
list1.add(new Class1("name3","number3"));
list1.add(new Class1("name4","number4"));

list2.add(new Class1("name1","number1"));
list2.add(new Class1("name5","number2"));
list2.add(new Class1("name6","number3"));
list2.add(new Class1("name2","number4"));

list1.removeAll(list2);

删除元素后list1

[Class1 {name ='name3'},Class1 {name ='name4'}]

编辑

另一种没有覆盖equalshashCode的方法是使用removeIf方法(自java 8起可用):

list1.removeIf(c -> list2.stream()
                    .map(Class1::getName)
                    .anyMatch(n -> n.equals(c.getName())));

在这里,我将删除list1上的每个元素,其名称等于list2上元素的名称。

另一答案

将两个列表合并为单个列表并将其发送到自定义函数下方:

HashMap存储唯一键,从自己的类中选择任何字段(唯一值),并将该字段值作为键设置为HashMap,将类对象设置为值。

private List<Class1> clearListFromDuplicateFirstName(List<Class1> combineList) {

     Map<String, Class1> cleanMap = new LinkedHashMap<String, Class1>();
     for (int i = 0; i < combineList.size(); i++) {
          cleanMap.put(combineList.get(i).getname(), combineList.get(i));
     }

     return new ArrayList<Class1>(cleanMap.values());;
}

以上是关于如何比较两个对象数组以删除重复项?的主要内容,如果未能解决你的问题,请参考以下文章

从数组中删除重复的对象

如何比较两个数组并通过完整迭代删除重复的对象

如何删除已经在list中的重复项

如何使用两个键删除数组中的重复项?

如何从对象数组中删除所有重复项?

关于如何去除数组中重复项