欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java list 比较详解及实例

程序员文章站 2024-02-20 22:25:34
java list 比较详解及实例 java里比较两个list的值是否一致,不考虑顺序,有多种方法,比如排序后直接用equals比较,相互之间执行两次containsal...

java list 比较详解及实例

java里比较两个list的值是否一致,不考虑顺序,有多种方法,比如排序后直接用equals比较,相互之间执行两次containsall等,这些办法都需要我们给list的元素类实现equals和hashcode方法。但是有一种特殊情况,如果我们并不方便去实习类的equals方法,例如是一个古老的第三方jar包,改代码会带来很多未知问题,这时候该怎么办呢。

其实很简单,万能的apache-commons早就想到了这一点,所以在commons-collections4中增加了外部输入equals和hashcode的方法,甚至equals和hashcode方法本身也不需要我们自己写代码,可以用comons-lang包实现,具体代码如下

   <dependency>
      <groupid>org.apache.commons</groupid>
      <artifactid>commons-collections4</artifactid>
      <version>4.1</version>
    </dependency>
    <dependency>
      <groupid>org.apache.commons</groupid>
      <artifactid>commons-lang3</artifactid>
      <version>3.5</version>
    </dependency>
  public static <t> boolean isequalcollection(collection<t> l1, collection<t> l2, final string... exludedfields) {
    equator<t> equator = generateequator(exludedfields);
    return collectionutils.isequalcollection(l1, l2, equator);
  }
 private static <t> equator<t> generateequator(final string... exludedfields) {
    equator<t> equator = new equator<t>() {
      @override
      public boolean equate(t o1, t o2) {
        if (o1 == null && o2 == null) {
          return true;
        }
        if (o1 == null || o2 == null) {
          return false;
        }
        if (o1.getclass() != o2.getclass()) {
          return false;
        }
        return equalsbuilder.reflectionequals(o1, o2, exludedfields);
      }

      @override
      public int hash(t o) {
        return hashcodebuilder.reflectionhashcode(o, exludedfields);
      }
    };
    return equator;
  }

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!