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; }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!