我正在尝试迭代一个arraylist。List<Map<String, Object>> majorList=new ArrayList<Map<String, Object>>();
数据格式将是
{&#34;分类帐&#34;:&#34; A&#34;,&#34; basicAmt&#34;:10,&#34;消费税&#34;:2}, {&#34;分类帐&#34;:&#34; B&#34;,&#34; exciseAmt&#34;:20,&#34; grossAmt&#34;:3}, {&#34;分类帐&#34;:&#34; A&#34;,&#34; basicAmt&#34;:30,&#34;消费税&#34;:5}, {&#34;分类帐&#34;:&#34; C&#34;,&#34; exciseAmt&#34;:50,&#34; grossAmt&#34;:10}, {&#34;分类帐&#34;:&#34; B&#34;,&#34; basicAmt&#34;:40,&#34;消费税&#34;:8},
所需的结果如下:
答案 0 :(得分: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());
}
}
答案 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());
}
}
}
}