如何比较两个对象数组来删除重复项?
我正在使用两个对象数组来删除重复的对象。如何比较两个对象数组来删除重复项?
我有数组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());;
}
会尝试和更新你。 – basha
可以使用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
上的元素名称。
谢谢你它为我工作。 Upvote for You – basha
酷。现在你可以[接受这个答案](https://*.com/help/accepted-answer)。 –
你有没有尝试使用HashSet? –
我尝试过单个数组列表。 – basha
因此,您想要删除列表2上存在的列表1上的元素? –