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;
    }

学习地址:xjava 中对一个List,按某一属性值进行归类成Map_octdream的专栏-CSDN博客_list分类map

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值