java list 比較詳解及實(shí)例
java list 比較詳解及實(shí)例
java里比較兩個(gè)list的值是否一致,不考慮順序,有多種方法,比如排序后直接用equals比較,相互之間執(zhí)行兩次containsAll等,這些辦法都需要我們給list的元素類實(shí)現(xiàn)equals和hashcode方法。但是有一種特殊情況,如果我們并不方便去實(shí)習(xí)類的equals方法,例如是一個(gè)古老的第三方j(luò)ar包,改代碼會(huì)帶來(lái)很多未知問(wèn)題,這時(shí)候該怎么辦呢。
其實(shí)很簡(jiǎn)單,萬(wàn)能的apache-commons早就想到了這一點(diǎn),所以在commons-collections4中增加了外部輸入equals和hashcode的方法,甚至equals和hashcode方法本身也不需要我們自己寫(xiě)代碼,可以用comons-lang包實(shí)現(xiàn),具體代碼如下
<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;
}
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
JAVA HTTP反向代理實(shí)現(xiàn)過(guò)程詳解
這篇文章主要介紹了JAVA HTTP反向代理實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
使用Spring的攔截器監(jiān)測(cè)每個(gè)Controller或方法的執(zhí)行時(shí)長(zhǎng)
這篇文章主要介紹了使用Spring的攔截器監(jiān)測(cè)每個(gè)Controller或方法的執(zhí)行時(shí)長(zhǎng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
spring-boot-maven-plugin:unknown的完美解決方法
這篇文章主要介紹了spring-boot-maven-plugin:unknown的完美解決方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
Java編程Socket實(shí)現(xiàn)多個(gè)客戶端連接同一個(gè)服務(wù)端代碼
這篇文章主要介紹了Java編程Socket實(shí)現(xiàn)多個(gè)客戶端連接同一個(gè)服務(wù)端代碼,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11
spring mvc DispatcherServlet之前端控制器架構(gòu)詳解
這篇文章主要為大家詳細(xì)介紹了spring mvc DispatcherServlet之前端控制器架構(gòu),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
java多線程Thread的實(shí)現(xiàn)方法代碼詳解
這篇文章主要介紹了java多線程Thread的實(shí)現(xiàn)方法代碼詳解,涉及start(),run(),stop(),interrupt(),isInterrupted(),join()和join(long millis)等方法的介紹,具有一定借鑒價(jià)值,需要的朋友可以了解下。2017-11-11
JUnit中獲取測(cè)試類及方法的名稱實(shí)現(xiàn)方法
這篇文章主要介紹了JUnit中獲取測(cè)試類及方法的名稱實(shí)現(xiàn)方法,本文使用了JUnit中提供的TestName實(shí)現(xiàn),不過(guò)還有一些編程細(xì)節(jié)需要注意,需要的朋友可以參考下2015-06-06
淺談System.getenv()和System.getProperty()的區(qū)別
這篇文章主要介紹了System.getenv()和System.getProperty()的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06

