[英]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.