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

我正在使用两个对象数组来删除重复的对象。如何比较两个对象数组来删除重复项

我有数组1 Class1.java

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"));

现在我想的名字来比较列表1和表2。 我怎样才能把列表1重复的元素与列表进行比较后2

回答:

合并两组名单成单独的列表,并发送下面的自定义函数:

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());;

}

回答:

可以使用removeAll方法上list2删除list1存在的元素。首先,你必须覆盖类的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'}]

EDIT

而不重写equalshashCode使用(可由于Java 8)removeIf方法的另一种方式:

list1.removeIf(c -> list2.stream() 

.map(Class1::getName)

.anyMatch(n -> n.equals(c.getName())));

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

以上是 如何比较两个对象数组来删除重复项? 的全部内容, 来源链接: utcz.com/qa/265239.html

回到顶部