复杂度: O(n2)
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test {
public static void main(String[] args){
List<Map<String,Object>> list1 = new ArrayList<Map<String,Object>>();
Map<String,Object> map1 = new HashMap<String,Object>();
Map<String,Object> map2 = new HashMap<String,Object>();
map1.put("aPrice", 92.0f);
map1.put("bPrice",11.0f);
map1.put("cPrice",122.0f);
map2.put("aPrice",23.0f);
map2.put("bPrice", 23.1f);
map2.put("cPrice", 85.0f);
list1.add(map1);
list1.add(map2);
Map<String,Object> mapAll = new HashMap<String,Object>();
for(Map<String,Object> map:list1){
for(Map.Entry<String, Object> entry:map.entrySet()){
String name = entry.getKey();
Object score = entry.getValue();
Object scoreAll = mapAll.get(entry.getKey());
// 如果是String类型则不相加 其它类型同理
if (scoreAll instanceof String)
continue;
if(scoreAll == null){
mapAll.put(name, score);
}else{
scoreAll = new Float((((Float)scoreAll).floatValue() + ((Float)score).floatValue()));
mapAll.put(name, scoreAll);
}
}
}
for(Map.Entry<String, Object> entry:mapAll.entrySet()){
System.out.println(entry.getKey() + "," + entry.getValue());
}
}
}
结果:
进阶版: List
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class BooleanTest {
public static void main(String[] args) {
List<Map<String, Object>> list1 = new ArrayList<Map<String, Object>>();
Map<String, Object> map1 = new HashMap<String, Object>();
Map<String, Object> map2 = new HashMap<String, Object>();
Map<String, Object> map3 = new HashMap<String, Object>();
Map<String, Object> map4 = new HashMap<String, Object>();
map1.put("aPrice", 92.0f);
map1.put("bPrice", 11.0f);
map1.put("cPrice", 122.0f);
map1.put("类型", "网络");
map2.put("aPrice", 23.0f);
map2.put("bPrice", 23.1f);
map2.put("cPrice", 85.0f);
map2.put("类型", "窗口");
map3.put("aPrice", 12.0f);
map3.put("bPrice", 61.0f);
map3.put("cPrice", 822.0f);
map3.put("类型", "网络");
map4.put("aPrice", 44.0f);
map4.put("bPrice", 33.1f);
map4.put("cPrice", 785.0f);
map4.put("类型", "窗口");
list1.add(map1);
list1.add(map2);
list1.add(map3);
list1.add(map4);
List newList = new ArrayList();
Map<String, Object> mapAll = new HashMap<String, Object>();
Map<String, Object> mmm = new HashMap<String, Object>();
for (Map<String, Object> map : list1) {
String tempStationName = (String) map.get("类型");
if (tempStationName.equals("窗口")) {
// 这里可以封装
for (Map.Entry<String, Object> entry : map.entrySet()) {
String name = entry.getKey();
Object score = entry.getValue();
Object scoreAll = mapAll.get(entry.getKey());
if (scoreAll instanceof String)
continue;
if (scoreAll == null) {
mapAll.put(name, score);
} else {
scoreAll = new Float((((Float) scoreAll).floatValue() + ((Float) score).floatValue()));
mapAll.put(name, scoreAll);
}
}
} else {
for (Map.Entry<String, Object> entry : map.entrySet()) {
String name = entry.getKey();
Object score = entry.getValue();
Object scoreAll = mmm.get(entry.getKey());
if (scoreAll instanceof String)
continue;
if (scoreAll == null) {
mmm.put(name, score);
} else {
scoreAll = new Float((((Float) scoreAll).floatValue() + ((Float) score).floatValue()));
mmm.put(name, scoreAll);
}
}
}
}
newList.add(mapAll);
newList.add(mmm);
System.out.println(newList);
}
}
结果如下:(商业数据用BigDecimal float会精度丢失)