HashMap中每个行值的总和<string,list <rrddata =“”>&gt;在java中

时间:2015-07-21 12:21:23

标签: java hashmap

我的格式为:HashMap<String, List<RrdData>> myData

{Data1=[ [Time=1437479200, value=0.8],  [Time=1437479201, value=12]], Data2=[[Time=1437479200, value=123], [Time=1437479201, value=78]], Data3=[[fetchTime=1437479200, value=789], [Time=1437479201, value=45]}

我想对每个数据的第一个值求和,然后是第二个值,依此类推。例如:(数组列表的大小不是静态的)

Data1.firstalue + Data2.firstValue+ Data3.firstValue.
Data1.secondValue + Data2.secondValue + Data3.secondValue

所以以垂直计算的形式。 我写的是横版。如何将其更改为垂直方式?

for (Entry<String, List<RrdData>> counterEntry : myData.entrySet()) {
    final List<RrdData> tempValues = counterEntry.getValue();
    for (int i=0; i<length; i++) {
        sum += tempValues.getValue(i);
    }    
}

1 个答案:

答案 0 :(得分:1)

首先找到最长的counterEntry List。然后做

for (int i = 0; i<longestLength;i++){
   for (List<RrdData> counterEntry : myData.getValues()) {
       if(counterEntry.size() > i){
           sum += counterEntry.getValue(i);
      }

   }
   System.out.println(sum);
   sum = 0;
}

当然这将非常慢(因为你必须遍历整个列表中的每个条目)。但是编程和理解起来非常容易。

如果您想要更快捷的方式:

List<Integer> sums = ArrayList<Integer>();

for (List<RrdData> counterEntry : myData.getValues()) {
   for (int i = 0; i<counterEntry.size(); i++) {
        if(sums.size > i){
            sums.get(i) += counterEntry.getValue(i);
         }else 
            sums.add(counterEntry.getValue(i);
    } 
}

将所有金额保存到列表中。