我有两个映射,键为整数,值为double。
我想创建一个按键排序的第三个地图,值将是两个地图中的双打列表。
MAP1:
1, 90.00
5, 75.45
8, 76.50
MAP2:
4, 12.00
5, 322.09
8, 11.09
9, 21.00
最终地图:
1, (90.00,0.00)
5, (75.45,322.09)
8, (76.50,11.09)
9, (0.00, 21.00)
从上面可以清楚地看到,如果其他地图中的某个地图中的某个键缺失,则其他地图的最终地图中的值应默认为0.00
Map firstMap = new HashMap<Integer, Double>();
Map secondMap = new HashMap<Integer, Double>();
Map finalMap = new HashMap<Integer, List<Double>>();
firstMap.put(1, 90.00);
firstMap.put(5, 75.45);
firstMap.put(8, 76.50);
secondMap.put(4, 12.00);
secondMap.put(5, 322.09);
secondMap.put(8, 11.09);
secondMap.put(9, 21.00);
我可以使用putAll方法将所有键放入第三个映射中。但是如何按我的意愿设置值?
感谢阅读!
答案 0 :(得分:1)
简单地做
// Create a sorted map
Map<Integer, List<Double>> finalMap = new TreeMap<Integer, List<Double>>();
Set<Integer> keys = new HashSet<Integer>();
keys.addAll(firstMap.keySet());
keys.addAll(secondMap.keySet());
for (Integer key : keys) {
double first = firstMap.containsKey(key) ? firstMap.get(key) : 0.0;
double second = secondMap.containsKey(key) ? secondMap.get(key) : 0.0;
finalMap.put(key, Arrays.asList(first, second));
}
使用Guava 就像
一样简单Multimap<Integer, Double> finalMultiMap = ArrayListMultimap.create();
finalMultiMap.putAll(Multimaps.forMap(firstMap));
finalMultiMap.putAll(Multimaps.forMap(secondMap));
Map<Integer, Collection<Double>> finalMap = finalMultiMap.asMap();
答案 1 :(得分:0)
以下代码将执行请求的操作
List<Map<Integer, Double>> originals = getOriginalLists();
Map<Integer, List<Double>> result = new HashMap<Integer, List<Double>>();
for (Map<Integer, Double> original : originals) {
for (Map.Entry<Integer, Double> entry : original.entrySet()) {
if (!result.containsKey(entry.getKey())) {
result.put(entry.getKey(), new ArrayList<Double>());
}
result.get(entry.getKey()).add(entry.getValue());
}
}
它是一个地图列表,因此解决方案不限于两个地图。