我有两个列表,比如listA
和listA1
,listA
包含类A
类型的对象,listA1
也包含类A
类型的对象1}}。但listA
通过java代码添加了类A
对象,listA1通过将JSON
String转换为Class A
来添加A类对象。
现在我需要比较listA
和listA1
。如果listA
包含listA1
中的任何对象,我需要删除该对象,并返回listA
所有不在listA1
中的对象。
如何在Java中实现这一目标?
答案 0 :(得分:1)
请在课程equals
上实施(覆盖)A
方法,如下所示。完成后,contains
方法应该有所帮助。
public boolean equals(A a){
boolean bEqual = false;
if(this.value1!= null && a.value1!= null &&
this.value1.eqauls(a.value1)
........
........
) {
bEqual = true;
}
return bEqual;
}
修改强>
迭代listA1
的元素。如果它们出现在listA
中,请将其删除。
for(A a: listA1){
if(listA.contains(a)){
listA.remove(a);
}
}
答案 1 :(得分:0)
Apache的commons.collections库有一个CollectionUtils类,它为Collection操作/检查提供了易于使用的方法,例如交集,差异和联合。
The org.apache.commons.collections.CollectionUtils API文档就在这里。
我认为,您可以使用intersaction方法
答案 2 :(得分:0)
您需要覆盖班级中的.equals(Oject)
和.hashCode()
方法
列表不需要hashCode,但是当你重写equals时,合约说你必须覆盖hashCode
答案 3 :(得分:0)
如果您打算比较两个对象,请参阅comparing objects
另外,它如何运作equals
答案 4 :(得分:0)
我为解决这个问题做了什么准确的事情......
public static class A {
String headerName;
public String getHeaderName() {
return headerName;
}
public void setListBoxHeaderName(String headerName) {
this.headerName= headerName;
}
public A(String headerName) {
super();
this.headerName = headerName;
}
public boolean equals(A rData) {
boolean bEqual = false;
if (this.getHeaderName() != null && rData.getHeaderName() != null
&& this.getHeaderName().equals(rData.getHeaderName())) {
bEqual = true;
}
return bEqual;
}
}
为了比较两个列表,代码如下......
for (A value1 : listA1) {
for (A value2: listA) {
if (value2.equals(value1 )) {
listA.remove(value2);
break;
}
}
}
这就是我使用的确切解决方案谢谢