【问题标题】:How to compare Objects values which is inside two different list in Java?如何比较Java中两个不同列表中的对象值?
【发布时间】:2012-10-11 04:51:07
【问题描述】:

我有两个列表,比如listAlistA1listA 包含A 类型的对象,listA1 还包含A 类型的对象。但是listA 添加了@987654330 类型的对象@objects by java code 和listA1 通过将JSONString 转换为Class A 来添加A 类对象。

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

如何在 Java 中实现这一点?

【问题讨论】:

  • @zander 我使用了 contains() 方法,当对象相同时它工作正常,它不比较值..
  • 首先A类必须有一个“有效”的equals实现,然后我们可以使用List.removeAll
  • 为 A 类实现一个自定义的(你自己的)equals 方法,并使用此方法使用@white 建议的方法比较和删除对象
  • 阅读stackoverflow.com/questions/27581/…,实现equals和hashCode

标签: java json arraylist


【解决方案1】:

请在您的班级A 上实现(覆盖)equals 方法如下。完成后,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);
     }
   }

【讨论】:

  • listA 包含 15 个元素(A 类的对象)和 listA1 包含 5 个元素(A 类的对象)现在我必须比较对象的值(listA 和 listA1)并从 listA 中删除所有对象,它们是也出现在 listA1 中。谢谢
  • 感谢 Yogendra 我正在为 (A : listA) { if (listA.contains(A)) { listA.remove(value);但是不工作可能是对象的地址不同,因为不包含检查值它的对象检查地址。我的想法
  • 如果它适合你,请不要忘记接受关闭这个问题线程。
  • 你在你的类A中实现了equals方法(比较字段值)吗?
  • 请分享您的类A 属性及其数据类型。我会帮你实现equals方法。
【解决方案2】:

Apache 的 commons.collections 库有一个 CollectionUtils 类,该类为集合操作/检查提供易于使用的方法,例如交集、差异和联合。

The org.apache.commons.collections.CollectionUtils API 文档在这里。

我认为,您可以为此使用交互方法

【讨论】:

    【解决方案3】:

    您需要覆盖类中的 .equals(Oject).hashCode() 方法。
    列表不需要 hashCode,但是当你覆盖 equals 时,合同说你必须覆盖 hashCode

    【讨论】:

      【解决方案4】:

      如果您打算比较两个对象,请查看comparing objects

      另外,它是如何工作的equals

      【讨论】:

        【解决方案5】:

        我做了什么来解决这个问题.....

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

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

        【讨论】:

          猜你喜欢
          • 2021-12-03
          • 1970-01-01
          • 2022-11-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-10
          • 1970-01-01
          • 2022-01-19
          相关资源
          最近更新 更多