Я пытаюсь перебрать арраиста. List<Map<String, Object>> majorList=new ArrayList<Map<String, Object>>();
Формат данных
{"регистр": "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},
И требуемый результат будет выглядеть так:
Это создаст карту карт. Ключ на верхнем уровне - это книга. Вторичная карта будет иметь ключ для каждого типа. Тип будет создан, если он не существует или добавлен к существующей записи, если это произойдет. Он, наконец, отображает результаты в конце.
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());
}
}
Вам нужно будет заполнить новую карту, а затем добавить значения к общему ключу. После суммирования его лучше иметь 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());
}
}
}
}