HashMap<String, List<RrdData>> in java 中每一行值的总和
Sum of each row value in HashMap<String, List<RrdData>> in java
我有一个哈希图,格式如下: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);
}
}
首先找到最长的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);
}
}
将所有总和保存到列表中。
我有一个哈希图,格式如下: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);
}
}
首先找到最长的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);
}
}
将所有总和保存到列表中。