2017-12-27 337 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)。 –

相關問題