1. 程式人生 > >JAVA List結果集處理方法集合

JAVA List結果集處理方法集合

import org.apache.commons.lang.ObjectUtils;

import java.util.*;

/**
 * Created by hurf on 2015/10/12.
 */
public class ListMapUtil {
      /**
     * 比較陣列內容是否相等
     * @return
     */
    public static boolean compareArray(Object[] ary1,Object[] ary2){
        List<String> list1 = new ArrayList<String>();
        List<String> list2 = new ArrayList<String>();
        for (int i = 0,len1=ary1.length; i <len1 ; i++) {
            list1.add(ObjectUtils.toString(ary1[i]));
        }
        for (int i = 0,len2=ary2.length; i <len2 ; i++) {
            list2.add(ObjectUtils.toString(ary2[i]));
        }
        Object[] as1 = list1.toArray();
        Object[] as2 = list2.toArray();
        Arrays.sort(as1);
        Arrays.sort(as2);
        return Arrays.equals(as1, as2);
    }

    /**
     * 取出結果集List<Map>中的某一列,組合成陣列
     * @return
     */
    public static String[] getArray(List<Map> result,String columnName){
        List<String> strList = new ArrayList<String>();
        for (int i = 0,len = result.size(); i < len; i++) {
            strList.add(ObjectUtils.toString(result.get(i).get(columnName)));
        }
        return (String[])strList.toArray();
    }

    /**
     * 取出結果集List<Map>中的某一列,組合成List<String>
     * @param result
     * @param columnName
     * @return
     */
    public static List<String> getListStr(List<Map> result,String columnName){
        List<String> strList = new ArrayList<String>();
        for (int i = 0,len = result.size(); i < len; i++) {
            strList.add(ObjectUtils.toString(result.get(i).get(columnName)));
        }
        return strList;
    }

    /**
     * 記憶體結果集查詢,支援 = 和 IN 查詢
     * @param lm  未處理的結果集
     * @param conditionColumn 多個查詢條件{"KEY1":"VALUE1","KEY2":"VALUE2"}
     * @return
     */
    public static List<Map> getListMap(List<Map> lm,Map<String,Object> conditionColumn){
        if(lm.isEmpty()||lm.size()<=0){
            return lm;
        }
        if(conditionColumn.size()==0){
            return lm;
        }
        Map newConMap = new HashMap(conditionColumn);
        for (String key:conditionColumn.keySet()){
            List<Map> curList = new ArrayList<Map>();
            Object value = conditionColumn.get(key);
            if(value instanceof String){
                List<Map> mList = getListMap(lm,key,ObjectUtils.toString(value));
                for (int i = 0,ilen = mList.size(); i < ilen; i++) {
                    curList.add(mList.get(i));
                }
            }else if(value instanceof String[]){
                List<Map> mList = getListMap(lm,key,(String[])value);
                for (int i = 0,ilen = mList.size(); i < ilen; i++) {
                    curList.add(mList.get(i));
                }
            }else if(value instanceof List){
                List<Map> mList = getListMap(lm,key,(List<String>)value);
                for (int i = 0,ilen = mList.size(); i < ilen; i++) {
                    curList.add(mList.get(i));
                }
            }
            newConMap.remove(key);
            getListMap(curList, newConMap);
        }
        return lm;
    }

    /**
     * 記憶體結果集查詢,支援不等於號
     * @param lm
     * @param conditionColumnName
     * @param compareStr (資料庫欄位值 比較 入參)
     *                   MORE_THAN  :dbValue(資料庫值)>  conditionColumnValue(入參)
     *                   LESS_THAN  :dbValue(資料庫值)<  conditionColumnValue(入參)
     *                   MORE_EQUAL:dbValue(資料庫值) >= conditionColumnValue(入參)
     *                   LESS_EQUAL:dbValue(資料庫值) <= conditionColumnValue(入參)
     * @param conditionColumnValue
     * @return
     */
    public static List<Map> getListMap(List<Map> lm,String conditionColumnName,String compareStr,String conditionColumnValue){
        List<Map> strList = new ArrayList<Map>();
        if(">".equals(compareStr)){
            for (int i = 0,len = lm.size(); i < len; i++) {
                Map map = lm.get(i);
                String dbValue = ObjectUtils.toString(map.get(conditionColumnName));
                if(Double.valueOf(dbValue)>Double.valueOf(conditionColumnValue)){
                    strList.add(map);
                }
            }
        }else if("<".equals(compareStr)){
            for (int i = 0,len = lm.size(); i < len; i++) {
                Map map = lm.get(i);
                String dbValue = ObjectUtils.toString(map.get(conditionColumnName));
                if(Double.valueOf(dbValue)<Double.valueOf(conditionColumnValue)){
                    strList.add(map);
                }
            }
        }else if("<=".equals(compareStr)){
            for (int i = 0,len = lm.size(); i < len; i++) {
                Map map = lm.get(i);
                String dbValue = ObjectUtils.toString(map.get(conditionColumnName));
                if(Double.valueOf(dbValue) <= Double.valueOf(conditionColumnValue)){
                    strList.add(map);
                }
            }
        }else if(">=".equals(compareStr)){
            for (int i = 0,len = lm.size(); i < len; i++) {
                Map map = lm.get(i);
                String dbValue = ObjectUtils.toString(map.get(conditionColumnName));
                if(Double.valueOf(dbValue) >= Double.valueOf(conditionColumnValue)){
                    strList.add(map);
                }
            }
        }
        return strList;
    }

    /**
     * 根據條件欄位獲取 指定結果集 中的符合條件的行 (只支援單個條件)
     * @param lm
     * @param conditionColumnName
     * @return
     */
    public static List<Map> getListMap(List<Map> lm,String conditionColumnName,String conditionColumnValue){
        List<Map> strList = new ArrayList<Map>();
        for (int i = 0,len = lm.size(); i < len; i++) {
            Map map = lm.get(i);
            String dbValue = ObjectUtils.toString(map.get(conditionColumnName)).trim();//結果集中的實際值
            if(dbValue.equals(conditionColumnValue)){
                strList.add(map);
            }
        }
        return strList;
    }

    /**
     * 根據對應欄位,獲取所有變更的一條記錄
     * @param lm
     * @param conditionColumnName
     * @param conditionColumnValue
     * @return
     */
    public static Map getPutAllMap(List<Map> lm,String conditionColumnName,String conditionColumnValue){
        Map putAllMap = new HashMap();
        for (int i = 0,len = lm.size(); i < len; i++) {
            Map map = lm.get(i);
            String dbValue = ObjectUtils.toString(map.get(conditionColumnName)).trim();//結果集中的實際值
            if(dbValue.equals(conditionColumnValue)){
                putAllMap.putAll(map);
            }
        }
        return putAllMap;
    }

    /**
     * 支援 IN查詢
     * @param lm
     * @param conditionColumnName
     * @param  conditionColumnValues String[]
     * @return
     */
    public static List<Map> getListMap(List<Map> lm,String conditionColumnName,String[] conditionColumnValues){
        List<Map> strList = new ArrayList<Map>();
        for (int i = 0,clen = conditionColumnValues.length; i < clen; i++) {
            for (int j = 0,len = lm.size(); j < len; j++) {
                Map map = lm.get(j);
                String dbValue = ObjectUtils.toString(map.get(conditionColumnName));//結果集中的實際值
                if(dbValue.equals(conditionColumnValues[i])){
                    strList.add(map);
                }
            }
        }
        return strList;
    }

    /**
     * 支援 IN查詢
     * @param lm
     * @param conditionColumnName
     * @param  conditionColumnValues List<String>
     * @return
     */
    public static List<Map> getListMap(List<Map> lm,String conditionColumnName,List<String> conditionColumnValues){
        List<Map> strList = new ArrayList<Map>();
        for (int i = 0,clen = conditionColumnValues.size(); i < clen; i++) {
            for (int j = 0,len = lm.size(); j < len; j++) {
                Map map = lm.get(j);
                String dbValue = ObjectUtils.toString(map.get(conditionColumnName));//結果集中的實際值
                if(dbValue.equals(conditionColumnValues.get(i))){
                    strList.add(map);
                }
            }
        }
        return strList;
    }

  /**
     * 去重:根據指定唯一欄位去重(指定的欄位就是 類似主鍵欄位)
     * @param duListMap
     * @param keys
     * @return 呼叫例項:deleteDuplicate(duListMap,"BIZ_SNO"); //刪除結果集中BIZ_SNO是重複的Map
     */
    public static List<Map> deleteDuplicate(List<Map> duListMap,String... keys){
        int keyLen = keys.length;
        if(keyLen==1){//只考慮一個Key為唯一欄位的情況
            String firstKey = ObjectUtils.toString(keys[0]);
            for (int i = 0,len=duListMap.size(); i < len; i++) {
                for  ( int j= len-1; j > i; j-- )   {
                    if  (compareByKey(duListMap, firstKey, i, j))   {
                        duListMap.remove(j);
                    }
                }
            }
        }else{//比較所有指定的Key的值,相當於聯合主鍵
            for (int ki = 0; ki < keyLen; ki++) {
                String key =  ObjectUtils.toString(keys[ki]);
                for (int i = 0,len=duListMap.size(); i < len; i++) {
                    for  ( int j= len-1; j > i; j-- )   {
                        if  (compareByKey(duListMap, key, i, j)) {
                            duListMap.remove(j);
                        }
                    }
                }
            }
        }
        return duListMap;
    }

    private static boolean compareByKey(List<Map> duListMap, String firstKey, int i, int j) {
        return ObjectUtils.toString(duListMap.get(j).get(firstKey)).equals(ObjectUtils.toString(duListMap.get(i).get(firstKey)));
    }

      /**
     * 合併List<Map> 結果集
     * @param listMaps
     * @return
     */
    public static List<Map> mergeListMap(List<Map> ...listMaps){
        List<Map> rsListMap = new ArrayList<Map>();
        for (List<Map> listMap:listMaps){
            for (Map m:listMap){
                rsListMap.add(m);
            }
        }
        return rsListMap;
    }

    /**
     * 將兩個結果集用一個關聯欄位進行關聯,形成一個新的結果集(以第一個結果集為主)
     * @param baseList
     * @param relList
     * @param col
     */
    public static List<Map> mergeListMapsByCol(List<Map> baseList, List<Map> relList, String col) {
        List<Map> rlist = new ArrayList<Map>();
        for (Map bMap:baseList) {
            String colVal = ObjectUtils.toString(bMap.get(col));
            boolean addFlag = true;
            for (Map rMap:relList) {
                if(ObjectUtils.toString(rMap.get(col)).equals(colVal)){
                    rMap.putAll(bMap);
                    rlist.add(rMap);
                    rMap.put("REGISTER_NO",ObjectUtils.toString(rMap.get("BUSINESS_LICENCE_NO")));
                    rMap.put("REGISTER_TYPE","1");
                    rMap.put("COUNTRY_REVENUE",ObjectUtils.toString(rMap.get("BUSINESS_TAX_NO")));
                    rMap.put("COUNTRY_REVENUE_EXP",ObjectUtils.toString(rMap.get("TAX_NO_EXP_DATE")));
                    rMap.put("ORG_CODE",ObjectUtils.toString(rMap.get("ORG_ID_CODE")));
                    rMap.put("ORG_CODE_EXPDATE",ObjectUtils.toString(rMap.get("ORG_ID_EXP_DATE")));
                    addFlag = false;
                }
            }
            if(addFlag){
                rlist.add(bMap);
            }
        }
        return  rlist;
    }
  }