ForInfinity ForInfinity - 1 month ago 7
Java Question

How to sum up values in a HashMap<String, <String,Integer>>?

I have a following HashMap:

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


In the program, I do use enhanced loop to iterate few times and insert data into the HashMap, based on some kind of key, as in:

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


It produces the following output:

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


I use a formula to calculate the
totalCost
value, but I have to make sure it is set to 0 at each iteration's beginning.

My question is, I want to sum up
totalCost
and
length
values for each
primaryKey
. The end result should be something like this:

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


How would I accomplish that? Do I have to create another HashMap, or is it possible to modify the ones already existing? With a loop perhaps?

EDIT: Forgot to mention that if I try to obtain existing
totalCost
value with
dataArray.get(primaryKey).get(totalCost)
, compiler complains about a suspicious call to
java.util.Map
and returns
null
.

Answer

Why so complicated? Just alter your data-structure. OOP is meant to solve precisely that problem. Just store the subtables in an Object each and provide appropriate methods/variables. As for inserting the data into the existing Map: How would you distinguish the resulting sums from what you inserted as standard-values? In addition this would quite likely cause a concurrent modification, though there are ways to work around that.