[英]How to perform arithmetic operations through several HashMaps?
目前,我有6个HashMap,其中包含城市名称和不同类别的值,但是我需要对每个类别的每个城市的值进行汇总,即:
HashMap<String, Integer> HeatHMap = new HashMap<>();
HashMap<String, Integer> DaylightHMap = new HashMap<>();
HashMap<String, Integer> PrecitipationHMap = new HashMap<>();
HashMap<String, Integer> DaylightHMap = new HashMap<>();
HashMap<String, Integer> WindHMap = new HashMap<>();
HashMap<String, Integer> MoistureHMap = new HashMap<>();
HeatHMap包含以下内容:
Cities Values
Tucson 23
Hermosillo 47
Boulder 25
并且DaylightHMap包含:
Cities Values
Tucson 43
Hermosillo 37
Boulder 75
现在,我需要为每个类别添加每个城市(即Hermosillo)的值,并将这些值保存到另一个HashMap中,因此结果将类似于:
Cities Values
Tucson 78 = (23+43+...+n)
Hermosillo 160 = (47+37+...+n)
....
我当时在考虑将每个HashMap添加到ArrayList中,然后访问每个城市,但是我意识到将HashMap包含在列表中并不是解决此问题的好方法。 到目前为止,我有:
public void verifyTheWinner(
HashMap <String, Integer> Table1, HashMap <String, Integer> Table2,
HashMap <String, Integer> Table3, HashMap <String, Integer> Table4,
HashMap <String, Integer> Table5, HashMap <String, Integer> Table6)
{
List<HashMap> categories = new ArrayList<HashMap>();
categories.add(Weather);
categories.add(SeaWeather);
categories.add(Rainfall);
categories.add(Sunshine);
categories.add(Prices);
categories.add(AvgStd);
HashMap<String, Integer> citiesAndValuesTotal= new HashMap<>();
for (int i=0; i<categories.size(); i++){
......
}}
我的问题是:
如何执行算术运算,例如为每个城市添加值,然后将其保存到新的HashMap中?
是否可以使用另一个Collection来实现此目标,还是HashMap是解决此问题的最佳方法?
感谢您的支持,如果需要,请询问我更多详细信息。 欢迎每个答案。
使用更好的数据结构会更好,例如,一个类合并了任何给定城市的所有所需详细信息:
public class CityWeather {
private String name;
private int heat;
private int daylight;
// ...
private int moisture;
// ...
}
然后,您只需要一张地图,说
HashMap<String, CityWeather> weatherMap = new HashMap<>();
该地图可以满足您当前由其他所有地图提供的需求,包括您要创建的citiesAndValuesTotal
地图。 最后,您需要做的就是向CityWeather
添加方法,如下所示:
int meaninglessWeatherSum() {
return heat + daylight + ... + moisture;
}
然后,您无需执行任何特殊操作即可执行计算-随时随地都可以在其中进行。
我将创建一个自定义对象(可能称为City
)来处理类似的事情。
public class City {
public String name;
public Integer heat;
public Integer dayLight;
public Integer precipitation;
public Integer wind;
public Integer moisture;
public Integer getTotal() {
return heat + dayLight + precipitation + wind + moisture;
}
}
您可能只有一张地图,从城市名称到City
对象。
另外,我认为您拼写了“降水”,有两个“日光”图,并且参数名称与您在verifyTheWinner
方法中使用的名称不匹配。
我非常感谢您的解决方案John Bollinger和Adam Rosni,但我能够通过使用本文中的解决方案来解决此问题,该方法如何合并多个hashmaps并汇总java中相同键的值,这些值更适合我的需求。
我的解决方案如下:
//Solution from Melike Ttkn from the mentioned link
public HashMap<String, Integer> mergeAndAdd(ArrayList<HashMap<String, Integer>> maplist) {
HashMap<String, Integer> result = new HashMap<>();
for (HashMap<String, Integer> map : maplist) {
for (Map.Entry<String, Integer> entry : map.entrySet()) {
String key = entry.getKey();
Integer current = result.get(key);
result.put(key, current == null ? entry.getValue() : entry.getValue() + current);
}
}
return result;
}
然后,我添加了我的方法,以使HashMaps的listArray像这样:
public ArrayList<HashMap<String,Integer>> makeAlist(HashMap<String,Integer> Values1, HashMap<String, Integer> Values2, HashMap<String, Integer> Values3,
HashMap<String, Integer> Values4, HashMap <String, Integer> Values5, HashMap<String, Integer> Values6){
ArrayList<HashMap<String,Integer>> mergedCategories = new ArrayList<>();
mergedCategories.add(Values1);
mergedCategories.add(Values2);
mergedCategories.add(Values3);
mergedCategories.add(Values4);
mergedCategories.add(Values5);
mergedCategories.add(Values6);
return mergedCategories;
}
最后,我只是调用了此方法:
System.out.println(mergeAndAdd(makeAlist(Values1, Values2, Values3, Values4, Values5, Values6)));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.