如果我有這樣的物件串列,
person = [
a = {
name = john
address = bakerfield
phone = 1234
},
b = {
name = stacy
address = cloverfield
phone = 4567
},
.
.
.
.
]
如果所有物件的名稱和地址欄位都是唯一的,我想回傳 true。如果物件具有相同的名稱但地址不同,則它應該回傳 true,反之亦然。
我對 Java 相當陌生,所以很難弄清楚這一點。我嘗試用contains方法實作它,但沒有用。
編輯:固定 json 格式到物件
編輯 2:我能夠Comparator.comparing與TreeSet<>.
uj5u.com熱心網友回復:
首先,您需要在您的類中撰寫一個適當的equals(并且hashCode還!閱讀下面的第一個鏈接)方法,Person該方法將比較所有欄位以了解實體是否重復。
執行此操作時,您可以使用 javaSet集合的一項功能,該功能保證內部只有一個物件實體(添加時將“忽略”重復項)并比較初始陣列/串列和集合的大小在此陣列/串列上創建
List<Person> people = someDeserializeJsonMethod();
return people.size() == new HashSet<>(people).size();
閱讀更多:
- https://www.baeldung.com/java-equals-hashcode-contracts
- https://docs.oracle.com/javase/8/docs/api/java/util/Set.html
uj5u.com熱心網友回復:
當你說你有一個清單時。你的意思是你有:List<Person> person;?
因為你說你正在嘗試使用contains. 包含比較物件,而不是物件中的值。例如,如果我有一個字串 ArrayList。
ArrayList<String> colors = new ArrayList<>;
我有一些字串,例如:
String a = "red";
String b = "blue";
String c = "green";
String d = "green";
然后將 a,b,c 添加到 ArrayList,但忽略了 d。
colors.add(a);
colors.add(b);
colors.add(c);
現在物件在陣列串列中。我可以像這樣使用比較:
colors.contains(a)
這將回傳 true,因為物件“a”在 ArrayList 中。但是如果你嘗試colors.contains(d)它會回傳false。即使'c'的值是'green',它與'd'的值相同。不是同一個物件。因為 '.contains()' 只是比較物件而不是物件的值。
如果要比較串列/陣列串列的值,則必須使用 For 回圈。
public boolean comparePerson(ArrayList<Person> persons, Person person) {
//persons is your main list. And person is a single person that you want to see if they are in the ArrayList.
for (Person p: persons) {
if (person.name == p.name) {
if (person.address == p.address) {
return true;
}
}
}
return false;
}
可選地,這就是為什么擁有 Id 欄位很有用。您只需要比較 Id 而不是多個欄位即可確定匹配。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/365168.html
