2017-04-04 80 views
2

我有我的對象與一些feilds。對象集包含與對象的值(不參考)(Java 7)

public class MyObject{ 

    private String a; 
    private String b; 

} 

我有一組包含這樣的對象:

Set<MyObject> thirdSet = new HashSet<MyObject>(); 

Set<MyObject> firstSet=getFirstSet(); 

Set<MyObject> secondSet = getSecondeSet(); 


for (MyObjectobj : firstSet) { 
    if (!secondSet.contains(obj)) { 
    thirdSet.add(obj); 
    } 
} 

我需要選擇不包含在我的secondSet到thridSet所有OBJ(OBJ有沒有參考值) 是否有可能或使用集合更好?

回答

1

您應該在MyObject.java中覆蓋Object#equalsObject#hashCode

@Override 
public boolean equals(Object o) { 
    if (!(o instanceof MyObject)) { 
     return false; 
    } 

    MyObject m = (MyObject) o; 

    return a.equals(m.a) && b.equals(m.b); 
} 

@Override 
public int hashCode() { 
    return Objects.hash(a, b); 
} 

此外,如果你被允許使用外部庫,你應該檢查出番石榴的Sets#difference

+0

謝謝多數民衆贊成在工作 – mir

+0

@xenu沒問題,請接受答案! –

+1

其完成@Jacob :) – mir

0

您需要重寫對象中的equals和hashcode方法。如果可以阻止NullPointerException,我建議使用java 7 Objects實用程序方法。

@Override 
public boolean equals(Object other) { 
    if (!(other instanceof MyObject)) { 
     return false; 
    } 
    MyObject that = (MyObject) other; 
    return Objects.equals(a, that.a) && Objects.equals(b, that.b); 
} 

@Override 
public int hashcode() { 
    Objects.hash(a, b); 
} 

我還建議看看第三方庫番石榴如果可能,這將簡化您的代碼。

Set<MyObject> thirdSet = new HashSet<>(Sets.difference(firstSet, secondSet)); 

注意包裝在一個新的HashSet,因此它可以被修改(如果你不需要修改它,你可以刪除)

+0

我不使用Guawa,但感謝您的回覆 – mir