如何总结HashMap中的值<string,<string,integer =“”>&gt;?

时间:2016-11-03 23:30:31

标签: java hashmap

我有以下HashMap:

HashMap<String, HashMap<String,Integer>> dataArray = new HashMap<>();

在程序中,我使用增强循环迭代几次并根据某种键将数据插入HashMap,如:

dataArray.get(primaryKey).put(length, totalCost)

它产生以下输出:

{123-456-789={00:05:00=500, 00:01:06=220}, 999-090-090={00:08:01=900}}

我使用公式计算totalCost值,但我必须确保在每次迭代开始时将其设置为0。

我的问题是,我想总结每个totalCost的{​​{1}}和length值。最终结果应该是这样的:

primaryKey

我将如何实现这一目标?我是否必须创建另一个HashMap,或者是否可以修改已存在的HashMap?或许有一个循环?

编辑:忘记提及如果我尝试使用{123-456-789={00:06:06=720}, 999-090-090={00:08:01=900}} 获取现有totalCost值,编译器会抱怨对dataArray.get(primaryKey).get(totalCost)的可疑调用并返回java.util.Map

2 个答案:

答案 0 :(得分:0)

为什么这么复杂?只是改变你的数据结构。 OOP旨在解决这个问题。只需将子表存储在Object中,并提供适当的方法/变量。至于将数据插入到现有的Map中:您如何将结果总和与插入的标准值区分开来?此外,这很可能会导致并发修改,尽管有办法解决这个问题。

答案 1 :(得分:0)

如果您想要以下表格的最终结果: {123-456-789 = {00:06:06 = 720},999-090-090 = {00:08:01 = 900}} 为什么不通过在地图中只保留一个键值对来将循环更改为类似的东西:

 Map.Entry<String,Integer> entry=dataArray.get(primaryKey).entrySet().iterator().next();
 String key= entry.getKey();
 dataArray.get(primaryKey).put(key + length,    dataArray.get(primaryKey).get(key) + totalCost);

我希望这有帮助!