получить уникальное имя и соответствующую сумму суммы от массива карт

1

Я пытаюсь перебрать арраиста. List<Map<String, Object>> majorList=new ArrayList<Map<String, Object>>();

Формат данных

  1. {"регистр": "A", "basicAmt": 10, "акциз": 2}, {"регистр": "B", "exciseAmt": 20, "grossAmt": 3}, {"bookger": A "," basicAmt ": 30," excise ": 5}, {" bookger ":" C "," exciseAmt ": 50," grossAmt ": 10}, {" bookger ":" B "," basicAmt ": 40, "акциз": 8},

    И требуемый результат будет выглядеть так:

    1. {"регистр": "A", "basicAmt": 40, "акциз": 7}, {"регистр": "B", "exciseAmt": 60, "grossAmt": 11}, {"bookger": C "," basicAmt ": 50," акциз ": 10},
  • 0
    Является ли "гроссбух" ключом вашей карты?
  • 0
    Рад, что другие, кажется, понимают твой вопрос - я был действительно озадачен, каков твой настоящий вопрос.
Показать ещё 3 комментария
Теги:

2 ответа

0

Это создаст карту карт. Ключ на верхнем уровне - это книга. Вторичная карта будет иметь ключ для каждого типа. Тип будет создан, если он не существует или добавлен к существующей записи, если это произойдет. Он, наконец, отображает результаты в конце.

    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());
        }
    }
  • 0
    С помощью этого кода я получаю все суммы акцизов, но мне нужна сумма акцизов и сумма брутто в соответствии с отчетом. как я показал в своем вопросе
  • 0
    Это не в вашем вопросе. Вы хотите обновить его до того, что вы хотите.
Показать ещё 1 комментарий
0

Вам нужно будет заполнить новую карту, а затем добавить значения к общему ключу. После суммирования его лучше иметь Map<String, Object> поскольку все карты будут для уникальной книги.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню