java 中对一个List,按某一属性值进行归类成Map

最近一直在写一个java的业务系统,后台对数据库的操作工作量巨大,这个是我在写代码时遇到的,总结出来的方法,希望能帮助到需要的人,什么也不多说了,直接上源码吧!

从数据库中取数据,根据MyBits返回结果主要有两种类型的List,一种是List<Entity>,还一种是List<Map<String,Object>>

以下是对List<Entity>的归类

    /**
     * 将对象列表按名称分类成Map(分类名必与对象的某 get方法的后的名一致<如:getName则传入“Name">
     * @param list
     * @param name
     * @return
     */
    public static <T> Map<String,List<T>> objListToMapClassificationByName(List<T> list,String name){
        Map<String,List<T>> resultMap = Maps.newHashMap();

        for (T obj : list) {
            try {
                Method method = obj.getClass().getMethod("get" + name);
                String keyName = (String) method.invoke(obj);
                if(StringUtils.isBlank(keyName))
                    continue;
                List<T> tempList = null;
                if (!resultMap.containsKey(keyName)) {
                    tempList = new ArrayList<>();
                } else {
                    tempList = resultMap.get(keyName);
                }
                tempList.add(obj);
                resultMap.put(keyName, tempList);
            }
            catch (Exception e) {

            }
        }
        return resultMap;
    }

    /**
     * 将对象列表按名称建立索引,分类名必与对象的某 get方法的后的名一致<如:getName则传入“Name">
     * @param list
     * @param name
     * @return
     */
    public static <V,T> HashMap<V, T> getObjListToMapForOnlyByName(List<T> list, String name) /*throws Exception*/{
        HashMap<V, T> mapResult=Maps.newHashMap();
        if(list != null && list.size() >0){
            for(T obj : list) {
                try{
                    Method method = obj.getClass().getMethod("get" + name);
                    mapResult.put((V)method.invoke(obj), obj);
                }
                catch (Exception e){
                    break;
                }
            }
        }
        return mapResult;
    }

以下是对List<Map<String,Object>>的归类

    /**
	 * 获取按字段索引的列表(可重复)
	 * @param list
	 * @param name
	 * @return HashMap<String,List<Map<String, Object>>>
	 */
	public static HashMap<String,List<Map<String, Object>>> getListClassifiedMapByName(List<Map<String, Object>> list,String name){
		HashMap<String,List<Map<String, Object>>> mapResult=Maps.newHashMap();
		if(list != null && list.size() >0) {
            for (Map<String, Object> map : list) {
                String keyName = (String) map.get(name);
                if(StringUtils.isBlank(keyName))
                    continue;
                List<Map<String, Object>> tempList = null;
                if (!mapResult.containsKey(keyName)) {
                    tempList = new ArrayList<>();
                } else {
                    tempList = mapResult.get(keyName);
                }
                tempList.add(map);
                mapResult.put(keyName, tempList);
            }
        }
		return mapResult;
	}

    /**
     * 将列表按照某个key分类,可重复(内容拷贝,不影响原list)
     * @param list
     * @param name
     * @return HashMap<String,List<Map<String, Object>>>
     */
    public static HashMap<String,List<Map<String, Object>>> getNewListClassifiedMapByName(List<Map<String, Object>> list,String name){
		
    	HashMap<String,List<Map<String, Object>>> mapResult=Maps.newHashMap();
		for (Map<String, Object> map : list) {
			String keyName=(String) map.get(name);
			Map<String, Object> valueMap = Maps.newHashMap();
			valueMap.putAll(map);
			
			List<Map<String, Object>> tempList = null;
			if(!mapResult.containsKey(keyName)) {
				tempList = new ArrayList<>();
			}
			else {
				tempList = mapResult.get(keyName);
			}
			tempList.add(valueMap);
			mapResult.put(keyName, tempList);	
		}
		return mapResult;
	}
    
    /**
     * 将列表按照某个key分类,唯一内容(内容拷贝,不影响原list)
     * @param list
     * @param name
     * @return HashMap<String,Map<String, Object>>
     */
    public static HashMap<String,Map<String, Object>> getNewListClassifiedMapForOnlyByName(List<Map<String, Object>> list,String name){
		HashMap<String,Map<String, Object>> mapResult=Maps.newHashMap();
		for (Map<String, Object> map : list) {
			String keyName=(String) map.get(name);
			if(StringUtils.isBlank(keyName))
			    continue;
			Map<String, Object> valueMap = Maps.newHashMap();
			valueMap.putAll(map);
			mapResult.put(keyName, valueMap);	
		}
		return mapResult;
	}
    

猜你喜欢

转载自blog.csdn.net/octdream/article/details/88962744