[英]Java: compare two object lists
我正在嘗試比較相同對象的兩個列表,這兩個列表是nodes_cc
和nodes_volume
。 它們包含幾個Node
對象。 Node is
由ID
和VALUE
定義。 兩個列表上的節點可以具有公共ID,但不能具有公共值。
我想比較這樣的列表:我控制第一個列表列表( nodes_cc
),如果遇到未出現在第二個列表上的節點( nodes_volume
),則即使我找到其他節點,該控件也必須停止甚至屬於第二個列表。 我當時想休息一下,所以嘗試了一下:
int count=0;
for (int i=0;i<cc_nodes.size();i++){
Node node = cc_nodes.get(i);
for(int j=0;j<volume_nodes.size();j++){
Node node2 = volume_nodes.get(j);
if (node.id==node2.id){
count++;
}
else {
break;
}
}
}
問題是:for循環僅在我做錯了的第一次檢查(計數為1)后才會中斷? 你能幫我解決這個問題嗎?
您可以使用一些布爾值,並在內部for
循環之后檢查它:
int count=0;
for (int i=0;i<cc_nodes.size();i++){
Node node = cc_nodes.get(i);
boolean found = false;
for(int j=0;j<volume_nodes.size();j++){
Node node2 = volume_nodes.get(j);
if (node.id==node2.id){
count++;
found = true;
}
}
if(!found)
break;
}
您可以在Node對象中重寫.equals()和.hashcode()方法以將id用作比較器,然后:
int count=0;
for (Node node : cc_nodes){
if(volume_nodes.contains(node))
count++;
else
break;
}
您可以在Node對象中添加它(如果id是int值)
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Node other = (Node) obj;
if (id != other.id)
return false;
return true;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.