2016-11-19 70 views
3

我希望從HasMap得到一個值,但一段時間值不存在,那麼我這樣做:的HashMap的Java獲得價值,如果它是存在

int var = 0; 
if (hashMapHouse.containsKey("home1") { 
    var = hashMapHouse.get("houme1"); 
} 
if(var==0) //do something 
else //do something else 

我的問題是:是否有可能有一個hashMap調用來獲取值並測試值是否存在或不存在?

回答

8

在Java 8,你可以使用getOrDefault方法:

int var = hashMapHouse.getOrDefault("home1", 0); 

這是乾淨的解決方案,在一個單一的線,你可以得到任何價值的關鍵,如果它存在或者預定義的默認值來指示它不存在 - 0在這種情況下。

+0

如果HashMap的值不是一個「int」,但是一個對象類似於這樣做('int var = hashMapHouse.getOrDefault(「home1」,0);')? – snorlax

+0

是的,你爲什麼不測試它? –

2

當然

Integer houme = hashMapHouse.get("houme1"); 

if (null == houme) { 
    // not exists 
} else { 
    // exists 
} 
+0

不過,我想也有hashMapHouse – snorlax

+0

權的價值。對我來說很早。編輯... –

1

docs

返回null值並不一定表明該映射不包含該鍵的映射關係;地圖也可能明確地將密鑰映射爲空。 containsKey操作可用於區分這兩種情況。

如果您不使用null的值,那麼你可以一次使用get()方法做這樣的:

Integer var = hashMap.get(key); 
if (var != null) { 
    // value exists 
} 
+0

誰*(提供鏈接,請)*是「不推薦」的方法,他們推薦什麼呢?鑑於大多數建議是不將'null'存儲在Map中(尤其是因爲某些地圖甚至不允許它),爲什麼不建議依賴'get()'返回'null'意思是「not found 「,因爲它優於首先調用'containsKey()'? – Andreas

+0

@Andreas我們可以在'Map'中顯式地將'null'保留爲'key'。所以,如果OP是這種情況,那麼使用'get()'來確定是否存在'key-value'並不是一個好主意。如果我錯了,請糾正我 – rafid059

+0

*如果* Map *將*包含空值,調用'get()'將無法將「missing」與「there with null」區分開來。如果你需要知道區別,那麼你需要調用'containsKey()'。大多數情況下,Map不會包含空值*(尤其是在使用不允許的地圖時保證)*,因此在這些情況下不會出現歧義。 ---但那不重要。你說*「這不是**推薦的方法」*,我問你**是誰提出了這個建議,因爲我以前沒見過/聽過。 – Andreas