開發:隨筆記錄之 判斷list和map相等,併合並等問題

執筆記憶的空白發表於2015-07-17
/**
     * 根據特定規格,判斷兩個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;
    }

相關文章