Java 从地图的arraylist中获取唯一名称和相应的金额总和

Java 从地图的arraylist中获取唯一名称和相应的金额总和,java,Java,我正在尝试迭代arraylist。List majorList=new arraylist() 数据格式将是 {“分类账”:“A”,“基本收入”:10,“消费税”:2}, {“分类账”:“B”,“消费税金额”:20,“总收入”:3}, {“分类账”:“A”,“基本收入”:30,“消费税”:5}, {“分类账”:“C”,“消费税金额”:50,“总收入”:10}, {“分类账”:“B”,“基本收入”:40,“消费税”:8} 所需的结果如下: {“分类账”:“A”,“基本收入”:40,“消费税”:7}

我正在尝试迭代arraylist。
List majorList=new arraylist()

数据格式将是

  • {“分类账”:“A”,“基本收入”:10,“消费税”:2}, {“分类账”:“B”,“消费税金额”:20,“总收入”:3}, {“分类账”:“A”,“基本收入”:30,“消费税”:5}, {“分类账”:“C”,“消费税金额”:50,“总收入”:10}, {“分类账”:“B”,“基本收入”:40,“消费税”:8}

    所需的结果如下:

  • {“分类账”:“A”,“基本收入”:40,“消费税”:7}, {“分类账”:“B”,“消费税金额”:60,“总收入”:11}, {“分类账”:“C”,“基本收入”:50,“消费税”:10}

  • 这将创建一个地图地图。顶层的关键是分类账。次级映射将为每个“类型”设置一个键。如果类型不存在,则将创建该类型;如果存在,则将其添加到现有条目中。它最终会在最后显示结果

        List<Map<String, Object>> majorList = new ArrayList<Map<String, Object>>();
    
        // setup
        Map<String, Object> map = new HashMap<>();
        map.put("ledger", "A");
        map.put("basicAmt", 10);
        map.put("excise", 2);
        majorList.add(map);
    
        map = new HashMap<>();
        map.put("ledger", "B");
        map.put("exciseAmt", 20);
        map.put("grossAmt", 3);
        majorList.add(map);
    
        map = new HashMap<>();
        map.put("ledger", "A");
        map.put("basicAmt", 30);
        map.put("excise", 5);
        majorList.add(map);
    
        map = new HashMap<>();
        map.put("ledger", "C");
        map.put("exciseAmt", 50);
        map.put("grossAmt", 10);
        majorList.add(map);
    
        map = new HashMap<>();
        map.put("ledger", "B");
        map.put("basicAmt", 40);
        map.put("excise", 8);
        majorList.add(map);
    
        Map<String, Map<String, Object>> ledgers = new HashMap<>();
    
        // iterate through list
        for (Map<String, Object> m : majorList) {
    
            // get result map and create if does not exist
            String ledger = (String) m.get("ledger");
            Map<String, Object> ledgerMap = ledgers.get(ledger);
            if (ledgerMap == null) {
                ledgerMap = new HashMap<>();
                ledgers.put(ledger, ledgerMap);
            }
    
            // iterate through map for other keys
            for (Entry<String, Object> entry : m.entrySet()) {
                String key = entry.getKey();
                // ignore ledger key
                if (!key.equals("ledger")) {
                    // Add results
                    Integer value = (Integer) entry.getValue();
                    Integer existing = (Integer) ledgerMap.get(key);
                    if (existing == null) {
                        ledgerMap.put(key, value);
                    } else {
                        ledgerMap.put(key, existing + value);
                    }
                }
            }
        }
    
        // display results
        for (Entry<String, Map<String, Object>> entry : ledgers.entrySet()) {
            System.out.println("Ledger: " + entry.getKey());
            for (Entry<String, Object> ledgerEntry : entry.getValue()
                    .entrySet()) {
                System.out.println("  " + ledgerEntry.getKey() + ": "
                        + ledgerEntry.getValue());
            }
        }
    
    List majorList=new ArrayList();
    //设置
    Map Map=newhashmap();
    地图放置(“分类账”、“A”);
    地图放置(“basicAmt”,10);
    map.put(“消费税”,2);
    majorList.add(地图);
    map=新的HashMap();
    地图放置(“分类账”、“B”);
    地图.put("amt",20);;
    地图放置(“grossAmt”,3);
    majorList.add(地图);
    map=新的HashMap();
    地图放置(“分类账”、“A”);
    地图放置(“basicAmt”,30);
    地图出售(“消费税”,5);
    majorList.add(地图);
    map=新的HashMap();
    地图放置(“分类账”、“C”);
    地图放置(“消费税”,50);
    地图放置(“grossAmt”,第10页);
    majorList.add(地图);
    map=新的HashMap();
    地图放置(“分类账”、“B”);
    地图放置(“basicAmt”,40);
    地图出售(“消费税”,8);
    majorList.add(地图);
    Map账本=新建HashMap();
    //遍历列表
    用于(地图m:majorList){
    //获取结果映射并创建(如果不存在)
    字符串分类账=(字符串)m.get(“分类账”);
    Map-ledgerMap=ledgers.get(分类账);
    如果(ledgerMap==null){
    ledgerMap=新的HashMap();
    分类账。放置(分类账,分类账映射);
    }
    //在映射中迭代其他键
    对于(条目:m.entrySet()){
    String key=entry.getKey();
    //忽略分类帐键
    如果(!key.equals(“分类账”)){
    //添加结果
    整数值=(整数)项。getValue();
    整数existing=(整数)ledgerMap.get(键);
    if(现有==null){
    账本映射放置(键、值);
    }否则{
    账本映射放置(键,现有+值);
    }
    }
    }
    }
    //显示结果
    对于(条目:ledgers.entrySet()){
    System.out.println(“分类账:+entry.getKey());
    对于(Entry-ledgerEntry:Entry.getValue()
    .entrySet()){
    System.out.println(“+ledgerEntry.getKey()+”:”
    +ledgerEntry.getValue());
    }
    }
    
    您必须填充一个新映射,然后根据公共键添加值。求和后最好有一张
    地图
    ,因为所有地图都是唯一的分类账

        Map<String, Map<String, Object>> sumMap = new HashMap<String, Map<String,Object>>();
        for (Map<String, Object> abc : majorList) {
            Map temp = sumMap.get((String) abc.get("ledger"));
            if (temp == null) {
                sumMap.put((String) abc.get("ledger"), abc);
            } else {
                for (Entry<String, Object> entry : abc.entrySet()) {
                    if (!entry.getKey().equals("ledger")) {
                        temp.put(entry.getKey(),
                                (Integer) temp.get(entry.getKey())
                                        + (Integer) entry.getValue());
                    }
                }
            }
        }
    
    Map sumMap=newhashmap();
    用于(地图abc:majorList){
    Map temp=sumMap.get((字符串)abc.get(“分类账”);
    if(temp==null){
    sumMap.put((字符串)abc.get(“分类账”),abc);
    }否则{
    for(条目:abc.entrySet()){
    如果(!entry.getKey().equals(“分类账”)){
    临时输入(entry.getKey(),
    (整数)temp.get(entry.getKey())
    +(整数)entry.getValue());
    }
    }
    }
    }
    
    分类账是你地图的关键吗?很高兴其他人似乎理解了你的问题-我真的很困惑你的实际问题是什么。@underdog:是的分类账是关键。你的单键映射了多个值。。。。你能详细说明对象是什么数据结构吗?你的问题不清楚。请解释您的问题。使用此代码,我将获得所有消费税金额,但我需要根据不同分类账获得消费税总额和毛额总额。正如我在我的问题中所展示的,这不是你的问题。您想将其更新为您想要的吗?是的,我想迭代并在不同的列表中添加唯一的分类账名称和金额总和。