如何比较Java中两个不同列表中的对象值?

时间:2012-10-11 04:51:07

标签: java json arraylist

我有两个列表,比如listAlistA1listA包含类A类型的对象,listA1也包含类A类型的对象1}}。但listA通过java代码添加了类A对象,listA1通过将JSON String转换为Class A来添加A类对象。

现在我需要比较listAlistA1。如果listA包含listA1中的任何对象,我需要删除该对象,并返回listA所有不在listA1中的对象。

如何在Java中实现这一目标?

5 个答案:

答案 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;
                }
            }
        }

这就是我使用的确切解决方案谢谢