2017-12-27 334 views
-5

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

我有数组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

+2

你有没有尝试使用HashSet? –

+0

我尝试过单个数组列表。 – basha

+0

因此,您想要删除列表2上存在的列表1上的元素? –

回答

0

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

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());; 
} 
+0

会尝试和更新你。 – basha

2

可以使用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上的元素名称。

+0

谢谢你它为我工作。 Upvote for You – basha

+0

酷。现在你可以[接受这个答案](https://stackoverflow.com/help/accepted-answer)。 –

相关问题