当前位置: 代码迷 >> 综合 >> JAVA ListMap结果集处理方法集合
  详细解决方案

JAVA ListMap结果集处理方法集合

热度:65   发布时间:2023-09-30 02:16:28.0
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;}}