我正在尝试迭代一个数组列表.List<Map<String, Object>> majorList=new ArrayList<Map<String, Object>>();
数据格式将是
1. {"ledger": "A","basicAmt": 40,"excise": 7}, {"ledger": "B","exciseAmt": 60,"grossAmt": 11}, {"ledger": "C","basicAmt": 50,"excise": 10},
发布于 2015-03-25 10:10:58
这将创建一张地图。最高层的关键是分类账。二级地图将为每种“类型”都有一个键。如果类型不存在,则将创建该类型;如果存在,则会将其添加到现有条目中。最后将结果显示在最后。
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());
}
}发布于 2015-03-25 10:35:14
您必须填充一个新的Map,然后根据公共键添加值。经过总结,它更好的有一个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());
}
}
}
}https://stackoverflow.com/questions/29252678
复制相似问题