软件编程
位置:首页>> 软件编程>> java编程>> 判断List和Map是否相等并合并List中相同的Map

判断List和Map是否相等并合并List中相同的Map

作者:执笔记忆的空白  发布时间:2022-12-29 02:11:10 

标签:list,map,相等,合并

List、Set、Map判断两个对象相等的标准

  • List:通过equals()方法比较返回true即可。

  • HashSet:先比较两个对象hashCode()方法返回的值是否相等,如果不相等就认为两个对象是不相等的,如果两个对象的hashCode相等就继续调用equals()方法进一步判断两个对象是否相等,如果equals()方法返回true认为两个对象相等,返回false认为两个对象不相等。

  • TreeSet:两个对象通过compareTo(Object obj)方法比较是否返回0:如果返回0,则认为相等,否则不相等。

  • HashMap、HashTable:(1)两个key通过equals()方法比较返回true,两个key的hashCode值也相等;(2)value与另外一个对象通过equals()方法比较返回true即可。

  • TreeMap:两个key值通过compareTo()方法返回0,TreeMap即认为这两个key是相等的。


/**
  * 根据特定规格,判断两个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中有没有相同的keyMap(待需找的map)<br>
  * 如果找到则返回这个list和keyMap相同Map的下标,否则返回-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;
 }

来源:https://blog.csdn.net/moneyshi/article/details/41081313

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com