代码语言:javascript复制
/**
* 根据特定规格,判断两个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;
}