2017-05-05 66 views
3

我有兩個HashMap<String, Integer>我怎樣才能得到的平均值?得到兩個+ HashMap的平均值使用Java 8

HashMap<String, Integer> map1 

map1.put("str1", 7); 
map1.put("str2", 4); 

HashMap<String, Integer> map2 


map2.put("str1", 3); 
map2.put("str2", 2); 

預期輸出是:

("str1") = 5; 

("str2") = 3; 

我能夠檢索兩個地圖的總和如下:

map2.forEach((k, v) -> map1.merge(k, v, Integer::sum)); 

但我怎麼可以檢索兩個地圖的使用平均Java 8?

更新:

在@我張貼我的代碼的較大部分的要求:

HashMap<String, HashMap<String, Double>> map; 

     HashMap<String, Double> map2 = new HashMap<String, Double>(); 


     map = func1(); 
     map = func2(); 
     map = func3(); 


     for (Entry<String, HashMap<String, Double>> entry : map.entrySet()) { 
      String key = entry.getKey(); 

      HashMap<String, Double> mp = map.get(key); 


      mp.forEach((k, v) -> map2.merge(k, v, (t, u) -> (t + u)/2)); 


      for (Entry<String, Double> entry1 : mp.entrySet()) { 

       StringfieldName = entry1.getKey(); 
       Double score= entry1.getValue(); 


       System.out.println(fieldName.toString() + " = " + score); 



      } 
     } 


     return map2; 
    } 
+2

如果你已經有了這個總和,那麼你除了把它除以2並得到平均值是什麼? – kichik

+0

我嘗試:'mp.forEach((K,V) - > map2.merge(K,V,整型::總和)/ 2)',但我不能這個表達式內劃分( 「空隙方法不能返回一個值」) –

+0

@kichik取決於他的平均含義。我認爲它是'sum /(map1.values()。size()+ map2.values()。size())' – Michael

回答

4

你試着這樣做:

map1.forEach((k, v) -> map1.merge(k, v, (t, u) -> (t + u)/2)); 
+0

對於3個HashMaps這樣的價值觀的方式:100,59和100這樣產生的結果是:'89.76225' 。如果我加上'100 + 59 + 100 = 259'和**,然後**將259除以'3',則產生'86.3'的結果。如何修改此代碼以便產生相同的結果? –

+0

所以你使用3個地圖而不是2 @LittleKevin對不對?你能告訴我你的代碼嗎? –

+0

我實際上有地圖格式的數組:'的HashMap <字符串,HashMap中<字符串,雙>>地圖;'我通過外'地圖迭代',然後用相同的所有字符串平均所述''雙值價值(所以可以有任何數量的地圖)。你想讓我發佈這部分代碼嗎? –

0

爲什麼不利用Java 8的特性是什麼?

double avg = Stream.of(map1.values(), map2.values()) 
        .map(set -> set.stream().collect(Collectors.summingInt(Integer::intValue))) 
        .collect(Collectors.averagingDouble(Integer::doubleValue)); 
+1

...因爲你沒有得到預期的輸出? –

+0

@RobinTopper無論如何,OP都會遇到一些舍入誤差(如上面註釋中所述) – Dummy

+0

這個想法是將平均值通過鍵合併到第一個地圖中。你很酷,但做了一些不同的事情。 –