【发布时间】:2020-03-13 12:14:37
【问题描述】:
我的两个列表list2 和filetemp 的长度相同,并且包含日期和温度。列表中的一些元素如下所示:
[1946-01-12, 1946-01-12, 1946-01-12, 1946-01-13, 1946-01-13, 1946-01-13, 1946-01-14, 1946-01-14, 1946-01-14]
[-1.3, 0.3, -2.8, -6.2, -4.7, -4.3, -1.5, -0.2, -0.4]
我想把它们放在一个哈希图中,日期为键,温度为值。由于我有与每个日期对应的多个温度值,因此我想将每天的温度值求和(或者如果可能的话计算每天的平均温度),以便地图中的每个日期对应于该日期的平均温度。我现在的问题是我的地图看起来像:
1946-01-12: -2.8
1946-01-13: -4.3
1946-01-14: -0.4
所以不是对日期 1946-01-14 求和例如 -1.5+(-0.2)+(-0.4),而是返回该日期的最后一个温度。有人知道怎么解决吗?
public Map<LocalDate, Double> avarageTemperatures(LocalDate dateFrom, LocalDate dateTo) {
List<LocalDate> list2 = new ArrayList<>();
for (Weather weather : weatherData) {
list2.add(weather.getDateTime());
}
Map<LocalDate, Double> map = new HashMap<>();
List<Double> filetemp = new ArrayList<>();
for (Weather weather : weatherData) {
filetemp.add(weather.getTemperature());
}
Double val= 0.0;
for (int i=1; i<list2.size(); i++) {
if(list2.get(i)==list2.get(i-1)) {
val+= filetemp.get(i);
map.put(list2.get(i), val);
} else {
val=filetemp.get(i);
map.put(list2.get(i), val);
}
}
Set<Map.Entry<LocalDate, Double>> entrySet = map.entrySet();
for(Map.Entry<LocalDate,Double> entry : entrySet) {
if(!entry.getKey().isAfter(dateTo) && !entry.getKey().isBefore(dateFrom)) {
System.out.println(entry.getKey()+": "+(entry.getValue()));
}
}
return map;
}
【问题讨论】:
-
请正确格式化代码并使用语义名称,而不是
entry : entrySet。它更难阅读,而且由于您的问题基本上是要求这里的人调试您的代码,因此您应该确保代码尽可能好。 -
发布编译所需的代码。
-
日期总是排序的吗?因为这可以使这个计算更容易一些
-
@Rogue 是的,总是排序的
-
为什么要创建两个列表?有一个包含日期和相应温度的天气对象。
标签: java list loops hashmap average