List<Map<String, Object>>key相同累加数量

业务场景:
               在List<Map<String, Object>>。里面的Map<String, Object>某一个key(订单号)会出现相同。我们需要对相同的key进行合并

白俊遥博客

package com.chinajey.web.test;
 
import java.util.*;
 
 
/**
 * Created by water on 2018/11/1.
 */
 
public class Test {
    public static void main(String[] args) {
 
        List<Map<String, Object>> list = new ArrayList<>();
 
        Map<String, Object> map1 = new HashMap<>();
        map1.put("bar_code", "java1");
        map1.put("order_id", "JAVA交流");
        map1.put("count", 1);
        Map<String, Object> map2 = new HashMap<>();
        map2.put("bar_code", ".net1");
        map2.put("order_id", ".NET交流");
        map2.put("count", 1);
        Map<String, Object> map3 = new HashMap<>();
        map3.put("bar_code", "java2");
        map3.put("order_id", "JAVA交流");
        map3.put("count", 1);
        Map<String, Object> map4 = new HashMap<>();
        map4.put("bar_code", "java3");
        map4.put("order_id", "JAVA交流");
        map4.put("count", 1);
        list.add(map1);
        list.add(map2);
        list.add(map3);
        list.add(map4);
        list = removeRepeatMapByKey(list,"order_id");
 
        System.out.println(list);
 
    }
 
 
    /**
     * List<Map<String, Object>>  key相同累加数量
     * @author  shijing
     * @param list
     * @param mapKey
     * @return
     */
    public static List<Map<String, Object>> removeRepeatMapByKey(List<Map<String, Object>>
                                                                         list, String mapKey) {
 
        //把list中的数据转换成msp,去掉同一id值多余数据,保留查找到第一个id值对应的数据
        List<Map<String, Object>> listMap = new ArrayList<>();
        Map<String, Map> msp = new HashMap<>();
        for (int i = list.size() - 1; i >= 0; i--) {
            Map map = list.get(i);
            String id = (String) map.get(mapKey);
            map.remove(mapKey);
 
            //记录存在
            if(msp.containsKey(id)){
                //当前存放的数据     记录存在的数量+当前需要存放的数量
                map.put("count", Double.parseDouble(msp.get(id).get("count").toString())+Double.parseDouble(map.get("count").toString()));
                map.put("bar_code", msp.get(id).get("bar_code").toString()+";"+map.get("bar_code").toString());
            }
            //map 同一个key赋值会替换
            msp.put(id, map);
        }
        //把msp再转换成list,就会得到根据某一字段去掉重复的数据的List<Map>
        Set<String> mspKey = msp.keySet();
        for (String key : mspKey) {
            Map newMap = msp.get(key);
            newMap.put(mapKey, key);
            listMap.add(newMap);
        }
        return listMap;
    }
 
 
 
}

bar_code相当于订单的批次号,相同订单批次号用;隔开count相当于订单的数量,相同订单号的数量累加

程序员之家
请先登录后发表评论
  • 最新评论
  • 总共0条评论