有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java中HashMap<String,List<RrdData>>中每行值的总和

我有一个如下格式的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) 个答案

  1. # 1 楼答案

    首先找到最长的反输入列表。那就去吧

    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);
        } 
    }
    

    将所有金额保存到一个列表中