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