如何比较两个对象数组来删除重复项?
我正在使用两个对象数组来删除重复的对象。如何比较两个对象数组来删除重复项?
我有数组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
而不重写equals
和hashCode
使用(可由于Java 8)removeIf方法的另一种方式:
list1.removeIf(c -> list2.stream() .map(Class1::getName)
.anyMatch(n -> n.equals(c.getName())));
在这里,我上list1
其名称中除去每个元素是等于list2
上的元素名称。
以上是 如何比较两个对象数组来删除重复项? 的全部内容, 来源链接: utcz.com/qa/265239.html