2016-11-19 4 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

права. Мне это рано. Edited ... –

1

Из docs:

Возвращаемое значение NULL не обязательно означает, что карта не содержит отображения для ключа; также возможно, что карта явно отображает ключ в значение null. Операция containsKey может использоваться для различения этих двух случаев.

Если вы не используете null в качестве значения, то вы можете использовать метод get() один раз и сделать это так:

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

Кто * (укажите ссылку, пожалуйста) * «не рекомендует» метод, и что они рекомендуют вместо этого? Учитывая, что большинство рекомендаций состоят в том, чтобы не хранить «null» на карте (особенно, поскольку некоторые карты даже не позволяют это делать), почему бы не рекомендовать полагаться на 'get()' return 'null', что означает« не найден » ", поскольку он превосходит необходимость сначала называть' containsKey() '? – Andreas

+0

@Andreas Мы можем явно оставить 'null' против' key' в 'Map'. Так что, если это так для OP, тогда было бы неплохо использовать только 'get()' для определения того, существует или нет ключ-значение'. Исправьте меня, если я ошибаюсь – rafid059

+0

* Если * Карта * будет содержать нулевые значения, вызов 'get()' не сможет отличить «отсутствующий» от «там с нулевым». Если вам нужно знать разницу, то да, вам нужно будет вызвать 'containsKey()'. В большинстве случаев карта не содержит нулевых значений * (особенно гарантируется при использовании Карт, которые не позволяют ее) *, поэтому в этих случаях нет никакой двусмысленности. --- Но это не относится к делу. Вы сказали * «это не ** ** рекомендованный метод» *, и я просил вас **, который ** сделал эту рекомендацию, потому что я ее раньше не видел/не слышал. – Andreas

Смежные вопросы