【java集合】List<Map> 把不同map相同的key值进行累加

复杂度: O(n2)

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Test {

    public static void main(String[] args){
        List<Map<String,Object>> list1 = new ArrayList<Map<String,Object>>();
        Map<String,Object> map1 = new HashMap<String,Object>();
        Map<String,Object> map2 = new HashMap<String,Object>();

        map1.put("aPrice", 92.0f);
        map1.put("bPrice",11.0f);
        map1.put("cPrice",122.0f);
        map2.put("aPrice",23.0f);
        map2.put("bPrice", 23.1f);
        map2.put("cPrice", 85.0f);

        list1.add(map1);
        list1.add(map2);

        Map<String,Object> mapAll = new HashMap<String,Object>();
        for(Map<String,Object> map:list1){
            for(Map.Entry<String, Object> entry:map.entrySet()){
                String name = entry.getKey();
                Object score = entry.getValue();
                Object scoreAll = mapAll.get(entry.getKey());
                // 如果是String类型则不相加  其它类型同理
			      if (scoreAll instanceof String) 
			      continue;
                if(scoreAll == null){
                    mapAll.put(name, score);
                }else{
                    scoreAll = new Float((((Float)scoreAll).floatValue() + ((Float)score).floatValue()));
                    mapAll.put(name, scoreAll);
                }
            }
        }

        for(Map.Entry<String, Object> entry:mapAll.entrySet()){

            System.out.println(entry.getKey() + "," + entry.getValue());
        }

    }

}

结果:
在这里插入图片描述

进阶版: List中 按map的某个value值进行归类累加:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class BooleanTest {

    public static void main(String[] args) {
        List<Map<String, Object>> list1 = new ArrayList<Map<String, Object>>();
        Map<String, Object> map1 = new HashMap<String, Object>();
        Map<String, Object> map2 = new HashMap<String, Object>();
        Map<String, Object> map3 = new HashMap<String, Object>();
        Map<String, Object> map4 = new HashMap<String, Object>();

        map1.put("aPrice", 92.0f);
        map1.put("bPrice", 11.0f);
        map1.put("cPrice", 122.0f);
        map1.put("类型", "网络");

        map2.put("aPrice", 23.0f);
        map2.put("bPrice", 23.1f);
        map2.put("cPrice", 85.0f);
        map2.put("类型", "窗口");

        map3.put("aPrice", 12.0f);
        map3.put("bPrice", 61.0f);
        map3.put("cPrice", 822.0f);
        map3.put("类型", "网络");

        map4.put("aPrice", 44.0f);
        map4.put("bPrice", 33.1f);
        map4.put("cPrice", 785.0f);
        map4.put("类型", "窗口");

        list1.add(map1);
        list1.add(map2);
        list1.add(map3);
        list1.add(map4);

        List newList = new ArrayList();

        Map<String, Object> mapAll = new HashMap<String, Object>();
        Map<String, Object> mmm = new HashMap<String, Object>();

        for (Map<String, Object> map : list1) {
            String tempStationName = (String) map.get("类型");

            if (tempStationName.equals("窗口")) {
				// 这里可以封装
                for (Map.Entry<String, Object> entry : map.entrySet()) {
                    String name = entry.getKey();
                    Object score = entry.getValue();
                    Object scoreAll = mapAll.get(entry.getKey());

                    if (scoreAll instanceof String)
                        continue;

                    if (scoreAll == null) {
                        mapAll.put(name, score);
                    } else {
                        scoreAll = new Float((((Float) scoreAll).floatValue() + ((Float) score).floatValue()));
                        mapAll.put(name, scoreAll);
                    }

                }

            } else {

                for (Map.Entry<String, Object> entry : map.entrySet()) {
                    String name = entry.getKey();
                    Object score = entry.getValue();
                    Object scoreAll = mmm.get(entry.getKey());

                    if (scoreAll instanceof String)
                        continue;

                    if (scoreAll == null) {
                        mmm.put(name, score);
                    } else {
                        scoreAll = new Float((((Float) scoreAll).floatValue() + ((Float) score).floatValue()));
                        mmm.put(name, scoreAll);
                    }
                }
            }
        }
        newList.add(mapAll);
        newList.add(mmm);
        System.out.println(newList);


    }

}

结果如下:(商业数据用BigDecimal float会精度丢失)
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孟秋与你

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值