【问题标题】:How to get String key from HashMap?如何从 HashMap 中获取字符串键?
【发布时间】:2018-05-29 16:44:54
【问题描述】:

我有一个带有字符串键和字符串值的 HashMap。我想从列表中获取一个项目,我试图提供密钥并想获得价值,但它给出了一个错误。 以下示例如何通过给键“blazer”获得“both”值?

 HashMap<String,String> upper = new HashMap<>();
 upper.put("shoulder","both");
 upper.put("blazer","both");

 if(upper.get(upper.get("blazer"))) {} //gives an "incompatible types" error. 
 //Error: Required: boolean Found: java.lang.String

【问题讨论】:

  • 在这种情况下你会得到 null,因为 upper.get(upper.get("blazer"));与 upper.get("both"); 相同并且由于您没有键值为两者的条目,因此您将获得空值。目前还不清楚你要做什么。
  • @Barns 很抱歉,我编辑了我的问题并解决了它。
  • 这样更好。现在,(即使您没有发布堆栈跟踪)我们可以理解您收到错误的原因。删除反对票。

标签: java hashmap getvalue


【解决方案1】:

了解upper.get(key) 不会返回boolean 值。您已将HashMap 定义如下:

HashMap<String,String> upper = new HashMap<>();

这意味着keyvalue 的类型都是String。因此,提供一个有效的keyget() 方法将返回一个String

String myValue = upper.get("blazer");

如果您想在尝试读取值之前检查key 是否可用,您可以使用方法containsKey() with 将返回一个boolean 值,指示HashMap 是否包含具有给定的条目key:

if(upper.containsKey("blazer")){
    String myValue = upper.get("blazer");
    Log.e(TAG, "Yes blazer is available : " + myValue);
} 
else{
    Log.e(TAG, "No blazer is available!");
}

您还可以像这样遍历可用的keys:

Set<String> set = map.keySet();
for(String s : set){
    Log.e(TAG, "Map key = " + s + " value = " + map.get(s));
}

【讨论】:

    【解决方案2】:

    他们以你的方式拥有它upper.get(upper.get("blazer")); 只会返回 null。

    您正在将upper.get("blazer")(这将返回“both”)传递给您的外部upper.get。由于您的地图中没有存储“both”键,因此它返回 null。

    应该是:

    upper.get("blazer");
    

    【讨论】:

    • 为什么会这样?目前还不清楚 OP 想要做什么。
    • 要从 hashmap 中获取值,您需要为其提供键 map.get(key)。在这种情况下,密钥是"blazer"
    • OP 已经为upper.get 的两次调用提供了正确类型的密钥。
    • 没错,OP 所做的与upper.get("both"); 相同,并且由于没有密钥"both" 它不起作用。不确定incompatible types 错误是怎么回事,也许我们遗漏了一些东西
    • @Sacha 抱歉,这是我的错。我复制并粘贴了代码块,该行属于 if 情况。 if(upper.get(upper.get("blazer"))) 所以它给了我不兼容的类型错误。当你回答这个问题时,我意识到我的错了。
    猜你喜欢
    • 2018-10-29
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 2018-09-16
    • 1970-01-01
    • 2010-11-25
    • 2013-04-21
    相关资源
    最近更新 更多