我尝试比较两个相同对象的列表,这两个列表是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),我做错了?你可以帮忙解决这个问题吗?
答案 0 :(得分: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;
}
答案 1 :(得分:0)
你可以覆盖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;
}