2016-12-07 47 views
0

我現在有一個地圖存儲了以下信息:獲取從地圖獨特的物品總在java中

Map<String,String> animals= new HashMap<String,String>(); 
animals.put("cat","50"); 
animals.put("bat","38"); 
animals.put("dog","19"); 
animals.put("cat","31"); 
animals.put("cat","34"); 
animals.put("bat","1"); 
animals.put("dog","34"); 
animals.put("cat","55"); 

我想創建一個總在上面的地圖獨特的項目一個新的地圖。所以在上面的例子中,貓數爲170,蝙蝠數爲39,依此類推。

我已經使用set找到地圖上的獨特動物的條目試過了,但是,我無法獲得每個唯一的入口

+3

您目前有一個「貓」和一個「狗」的地圖。 'HashMap'不允許重複的鍵。 – Guy

+0

進一步解釋@Guy所說的話:每次在地圖中使用'put',並且鍵已經存在,那麼'put'將替換該鍵在地圖上的值。整個地圖的關鍵是一把鑰匙是獨一無二的,你可以只用鑰匙查看數據。 – RealSkeptic

+0

我看到了,試圖打印動物地圖,看看@Guy和RealSkeptic在說什麼。讓我試試dimo414的解決方案,看看是否有效 – BountyHunter

回答

1

首先總數,不使用String算術,使用intdouble (或BigInteger/BigDecimal,但這可能是矯枉過正)。我建議製作你的地圖Map<String, Integer>

其次,Map.put()覆蓋以前的值,如果給定的key已經存在於地圖上,從而@Guy指出地圖實際上只包含{cat:55, dog:34, bat:1}。你需要以某種方式獲得以前的值,以保存它。

的經典方法(前的Java-8)是像這樣:

public static void putOrUpdate(Map<String, Integer> map, String key, int value) { 
    Integer previous = map.get(key); 
    if (previous != null) { 
    map.put(key, previous + value); 
    } else { 
    map.put(key, value); 
    } 
} 

的Java 8增加了許多有用的方法來Map,使這種模式更加容易,像Map.merge()這確實看跌 - 或 - 更新你:

map.merge(key, value, (p, v) -> p + v); 

您也可能會發現multiset是它處理遞增/遞減供你使用更好的數據結構;番石榴提供a nice implementation

0

正如蓋伊所說。現在你有一隻蝙蝠,一隻狗和一隻貓。另一個'put'會覆蓋你以前的值。爲了定義。地圖存儲鍵值對,其中地圖中的每個鍵都是唯一的。如果你必須通過地圖來完成,你可以按時完成。例如,如果你想添加的貓另一個價值,要更新它,你能做到這樣:

animals.put("cat", animals.get("cat") + yourNewValue); 

您的貓值將被更新。例如,我們的數字是float/int/long,而不是你所擁有的字符串。如果你必須用字符串來做,你可以在這種情況下使用:

animals.put("cat", Integer.toString(Integer.parseInt(animals.get("cat")) + yourNewValue)); 

但是,它很醜。我建議創建

Map<String, Integer> animals = new HashMap<String, Integer>();