簡體   English   中英

如何通過幾個HashMap執行算術運算?

[英]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++){
       ......
    }}

我的問題是:

  1. 如何執行算術運算,例如為每個城市添加值,然后將其保存到新的HashMap中?

  2. 是否可以使用另一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM