栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java中ListMap树形结构的集合,进行逐级汇总的抽象

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java中ListMap树形结构的集合,进行逐级汇总的抽象

1. map1中累加map2中某个指定key的值(针对数值类型)

(1)如果map1中不存在key对应的值,则把map2中对应key的值添加进map1中;
(2)否则,map1中存在的值,和map2中存在的值,进行累加。代码如下所示:

   public static void addMapSameKey(Map map1, Map map2, String key) {

        if (map1.get(key) == null) {
            // 如果map1 中,指定的key值为空的时候,赋值为map2中对应的的key值元素。
            map1.put(key, map2.get(key));
        } else {
            // 否则,累加map2中对应的key值元素到map1.
            BigDecimal d1 = new BigDecimal(map1.get(key).toString());
            BigDecimal d2 = new BigDecimal(map2.get(key) == null ? "0" : map2.get(key).toString());
            map1.put(key, d1.add(d2));
        }
    }

(3)适用场景
该方法对map的累加进行了抽象,抽象后,可以作为一个基本的累加单元。

2. map中拷贝累加listMap中各属性的值

(1)map中的keyList分为三类:第一类是忽略的key列表,第二类是拷贝属性的key列表,第三类是除了前两类,数值类型的需要累加的key列表;
(2)对拷贝源的sourceList进行遍历;对每一个拷贝源map,亦进行key的遍历;
(3)进行判断,如果key值在拷贝列表里面,则执行拷贝操作;否则,如果也不在忽略列表里面,则执行累加操作。代码如下所示:

    public static copyAddListMap2Map(Map destMap, List> sourceList, List ignoreList, List copyList) {
        for (Map item : sourceList) {
            for (Map.Entry entry : item.entrySet()) {
                final String key = entry.getKey();
                if (copyList != null && copyList.contains(key)) {
                    destMap.put(key, item.get(key));
                } else if (!(ignoreList != null && ignoreList.contains(key))) {
                    addMapSameKey(destMap, item, key);
                }
            }
        }
    }

(4)适用场景
如果在sql中执行了查询后,需要在java后台附加统计汇总信息,则可以使用该方法,完成listMap的统计汇总。统计后,合并listMap和map即可。

3. listMap树结构累加求和

(1)list是Map的集合;Map中,又包括有children为key的listMap集合;
(2)对list集合进行遍历;对每一个map,判断该map是否存在children的listMap集合;如果存在,则执行map集合对ListMap的属性拷贝和累加。
(3)需要注意的是,忽略列表和属性拷贝列表。代码如下所示:

public static void copyAddListMapChild2Parent(List> list, List ignoreList, List copyList) {
        for (Map item : list) {
            // 如果子节点存在,则对应节点的属性,等于子节点列表对应的属性的和。
            if (item.get("children") != null) {
                List> childList = (List>) item.get("children");

                // 子节点列表属性之和,拷贝到对应的父节点。
                copyAddListMap2Map(item,childList,ignoreList,copyList);
            }
        }
    }

(4)适用场景,java后台中,需要对树形结构进行汇总的情况。

(好记性不如烂笔头。对抗遗忘的最好方式是:在解决问题的时候,记录下遇到的问题和解决的方式,后续遇到相同的问题,只需要翻翻笔记即可。)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/274595.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号