判斷List和Map是否相等并合并List中相同的Map
List、Set、Map判斷兩個(gè)對(duì)象相等的標(biāo)準(zhǔn)
- List:通過(guò)equals()方法比較返回true即可。
- HashSet:先比較兩個(gè)對(duì)象hashCode()方法返回的值是否相等,如果不相等就認(rèn)為兩個(gè)對(duì)象是不相等的,如果兩個(gè)對(duì)象的hashCode相等就繼續(xù)調(diào)用equals()方法進(jìn)一步判斷兩個(gè)對(duì)象是否相等,如果equals()方法返回true認(rèn)為兩個(gè)對(duì)象相等,返回false認(rèn)為兩個(gè)對(duì)象不相等。
- TreeSet:兩個(gè)對(duì)象通過(guò)compareTo(Object obj)方法比較是否返回0:如果返回0,則認(rèn)為相等,否則不相等。
- HashMap、HashTable:(1)兩個(gè)key通過(guò)equals()方法比較返回true,兩個(gè)key的hashCode值也相等;(2)value與另外一個(gè)對(duì)象通過(guò)equals()方法比較返回true即可。
- TreeMap:兩個(gè)key值通過(guò)compareTo()方法返回0,TreeMap即認(rèn)為這兩個(gè)key是相等的。
/**
* 根據(jù)特定規(guī)格,判斷兩個(gè)Map是否相等
*/
private static boolean isEquals(Map<String, String> src, Map<String, String> dest, String[] samekey) {
boolean equals = true;
StringBuffer sbf_src = new StringBuffer();
StringBuffer sbf_dest = new StringBuffer();
for (int i = 0; i < samekey.length; i++) {
sbf_src.append(src.get(samekey[i]));
sbf_dest.append(dest.get(samekey[i]));
}
if (sbf_src.toString().equals(sbf_dest.toString())) {
equals = true;
} else {
equals = false;
}
return equals;
}
/**
* 獲得list中有沒(méi)有相同的keyMap(待需找的map)<br>
* 如果找到則返回這個(gè)list和keyMap相同Map的下標(biāo),否則返回-1
*/
private static int getEqualsMap(List<Map<String, String>> list, Map<String, String> keyMap, String[] samekey) {
int equalsIndex = -1;
for (int i = 0; i < list.size(); i++) {
Map<String, String> tempMap = list.get(i);
if (isEquals(tempMap, keyMap, samekey)) {
equalsIndex = i;
}
}
return equalsIndex;
}
/**
* 合并List中相同的Map
* @param list
* @return
*/
public static List<Map<String, String>> combineList(List<Map<String, String>> list, String[] samekey,String combinekey) {
List<Map<String, String>> retList = new ArrayList<Map<String, String>>();
for (int i = 0; i < list.size(); i++) {
Map<String, String> tempMap = list.get(i);
int equalsIndex = getEqualsMap(retList, tempMap, samekey);
if (-1 == equalsIndex) {
retList.add(tempMap);
} else {
String custSrc = retList.get(equalsIndex).get(combinekey);
int custSrcInt = Integer.parseInt(custSrc.substring(0, custSrc.length() - 1));
String custTemp = tempMap.get(combinekey);
int custTempInt = Integer.parseInt(custTemp.substring(0, custTemp.length() - 1));
String destCust = (custSrcInt + custTempInt) + custSrc.substring(custSrc.length() - 1);
retList.get(equalsIndex).put(combinekey, destCust);
}
}
return retList;
}
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
- Json字符串與Object、List、Map的互轉(zhuǎn)工具類(lèi)
- Java中List根據(jù)map的某個(gè)key去重的代碼
- 在Java 8中將List轉(zhuǎn)換為Map對(duì)象方法
- Java三種方法將List轉(zhuǎn)換為Map的實(shí)例
- Java集合定義與用法實(shí)例總結(jié)【Set、List與Map】
- Java中對(duì)list map根據(jù)map某個(gè)key值進(jìn)行排序的方法
- 將List集合中的map對(duì)象轉(zhuǎn)為L(zhǎng)ist<對(duì)象>形式實(shí)例代碼
- java中快速創(chuàng)建帶初始值的List和Map實(shí)例
- 詳解 Spring注解的(List&Map)特殊注入功能
- 詳解Java中l(wèi)ist,set,map的遍歷與增強(qiáng)for循環(huán)
相關(guān)文章
java Date獲取年月日時(shí)分秒的實(shí)現(xiàn)方法
下面小編就為大家?guī)?lái)一篇java Date獲取年月日時(shí)分秒的實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-06-06
SpringBoot中操作Redis及工具類(lèi)的封裝詳解
在我們項(xiàng)目開(kāi)發(fā)中總是免不了會(huì)使用緩存,Redis現(xiàn)在基本是我們公司中非常常見(jiàn)的緩存方案,包括在用戶token的緩存,熱點(diǎn)信息的緩存等,這篇文章主要講講在SpringBoot項(xiàng)目中如何去操作Redis,及最后工具類(lèi)的封裝2023-05-05
Maven?pom.xml文件獲取當(dāng)前時(shí)間戳方式
這篇文章主要介紹了Maven?pom.xml文件獲取當(dāng)前時(shí)間戳方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
Java基礎(chǔ)學(xué)習(xí)之運(yùn)算符相關(guān)知識(shí)總結(jié)
今天帶大家復(fù)習(xí)Java基礎(chǔ)知識(shí),文中對(duì)Java運(yùn)算符相關(guān)知識(shí)作了詳細(xì)總結(jié),對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05
使用BeanFactory實(shí)現(xiàn)創(chuàng)建對(duì)象
這篇文章主要為大家詳細(xì)介紹了使用BeanFactory實(shí)現(xiàn)創(chuàng)建對(duì)象,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08

