![](/img/trans.png)
[英]How do I compare two lists in Java and print the result based on each combination?
[英]How do I compare two lists?
CompareList removedList = new CompareList();
CompareList addedList = new CompareList();
這就是我在里面添加元素的方式
addedList.add(new Objec("Var_a", "1"));
Objec類有兩個字符串。
我該如何比較? 我不能像字符串ArrayList那樣使用包含?
在CompareList中,我有
public boolean equals(CompareList l) {
if (l.containsAll(this)) {
if (this.containsAll(l)) {
return true;
}
}
return false;
}
和在Objec
public Objec(String n, String s) {
this.name=n;
this.surname=s;
}
public String toString() {
return " Name: " + name + ", Surname: " + surname;
}
我看到很多人對我的問題感到困惑。 那我想要什么?
清單1:
薩米·喬(Samy Joe)
艾瑪比
朱莉婭·羅伯
清單2:
薩米·喬(Samy Joe)
艾瑪比
安娜·斯凱
刪除了Julia Rob並添加了Anna Sky。 但是,當我的列表包含具有兩個字符串的對象時,我不知道該怎么辦?
這段代碼比較列表是否相等,即是否包含相同的元素。
static boolean same(Collection<?> a, Collection<?> b) {
if (a.size() != b.size()) {
return false;
}
List<?> c = new ArrayList<>(a);
c.removeAll(b);
return c.isEmpty();
}
a
),然后刪除b
的元素。 您不需要使用自己的類CompareList
,而是可以使用ArrayList
東西。
為了將Objec
與另一equals(Object)
進行比較,您需要正確實現equals(Object)
和hashCode()
。
如果您想知道其他列表中未包含哪些元素,則可以使用以下方法:
static HashMap<Collection<?>, Collection<?>> disjoints(Collection<?> a, Collection<?> b) {
List<?> aa = new ArrayList<>(a);
aa.removeAll(b);
List<?> bb = new ArrayList<>(b);
bb.removeAll(a);
HashMap<Collection<?>, Collection<?>> map = new HashMap<>();
map.put(a, aa);
map.put(b, bb);
return map;
}
它返回一個映射,該映射具有兩個集合作為鍵,並且由鍵指定的集合的元素作為值(未包含在另一個集合中)。 例如,如果你想知道的元素a
不存在的b
,然后調用disjoints(a, b).get(a)
。
注意:之所以稱為列表集合,是因為它們是。 在Java中, List
是Collection
的子類型。
您需要像這樣在自定義對象中覆蓋equals方法:
public class MyObject {
private String name;
private String surname;
@Override
public boolean equals(MyObject myObject) {
// assert that name and surename can not be null or check for this
if (!this.name.equals(myObject.name)) {
return false;
}
if (!this.surname.equals(myObject.surname)) {
return false;
}
return true;
}
}
列表的contains-Method將使用equals方法檢查對象的相等性。
但是@Prakash發布的鏈接是更好的方法。 我認為沒有人了解您對CompareList的關注以及為什么使用自定義的;)
編輯 :對不起,簽名有誤。
@Override
public boolean equals(Object obj) {
if (!(obj instanceof MyObject) {
return false;
}
// else cast and use code above
}
您的問題是:“我該如何比較?”
首先要記住的是,您可以通過兩種方式進行比較。 所以首先考慮一下。
平等:比較平等時
使用equals()並在實現時實現hashCode()。
比較/排序:什么時候將2個對象視為比另一個低,相同或高?
實現“可比較”接口並覆蓋compareTo。
您發布的內容包含equals(),因此可以說這就是您想要做的。 如果要使用containsAll(),請記住,它使用列表包含的類中的equals來計算返回true / false。 因此,您可能應該:
將equals()添加到“ Objec”類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.