Java 如何从HashMap中获取字符串键?

Java 如何从HashMap中获取字符串键?,java,hashmap,getvalue,Java,Hashmap,Getvalue,我有一个带有字符串键和字符串值的HashMap。我想从列表中获取一个项,我试图给出键并想得到值,但它给出了一个错误。 下面的示例如何使用“blazer”键获得“两者”值 HashMap upper=newhashmap(); 上部。放(“肩部”、“两侧”); 鞋面。推杆(“运动夹克”,“两者”); if(upper.get(upper.get(“blazer”)){}//给出“不兼容类型”错误。 //错误:必需:找到布尔值:java.lang.String 他们是你在那里的方式upper.get

我有一个带有字符串键和字符串值的HashMap。我想从列表中获取一个项,我试图给出键并想得到值,但它给出了一个错误。 下面的示例如何使用“blazer”键获得“两者”值

HashMap upper=newhashmap();
上部。放(“肩部”、“两侧”);
鞋面。推杆(“运动夹克”,“两者”);
if(upper.get(upper.get(“blazer”)){}//给出“不兼容类型”错误。
//错误:必需:找到布尔值:java.lang.String

他们是你在那里的方式
upper.get(upper.get(“blazer”))
将只返回null

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

应该是:

upper.get("blazer");

请理解
upper.get(key)
不会返回
布尔值。您已将您的
HashMap
定义如下:

HashMap<String,String> upper = new HashMap<>();
如果要在尝试读取值之前检查
键是否可用,可以使用
containsKey()
方法,将返回一个
布尔值,指示
HashMap
是否包含具有给定
键的条目:

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!");
}
您还可以像下面这样重复使用可用的
s:

Set<String> set = map.keySet();
for(String s : set){
    Log.e(TAG, "Map key = " + s + " value = " + map.get(s));
}
Set=map.keySet();
for(字符串s:set){
Log.e(标记,“Map key=“+s+”value=“+Map.get(s));
}

。在本例中,自upper.get(upper.get(“blazer”))起,您将获得null;与upper.get(“两者”)相同;由于您没有一个键值为两者的条目,因此将得到null。“不清楚你的目的是什么。@巴恩斯很抱歉,我编辑了我的问题并解决了它。这样更好。”。现在,(即使您没有发布堆栈跟踪),我们可以理解您为什么会出现错误。取消否决票。为什么会这样?不清楚OP试图做什么。若要从hashmap中获取值,需要为其指定键
map.get(key)
。在这种情况下,键是
“blazer”
OP已经为
upper.get的两个调用提供了一个正确类型的键。如果是,OP所做的操作与
upper.get(“两者”)相同“两者”
,所以它不起作用。不确定
不兼容类型是怎么回事
错误,也许我们找不到了something@Sacha对不起,那是我的错。我复制并粘贴了代码块,这一行在if中。if(upper.get(upper.get(“blazer”))所以它给了我不兼容的类型错误。当你回答这个问题时,我意识到了我的错。
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!");
}
Set<String> set = map.keySet();
for(String s : set){
    Log.e(TAG, "Map key = " + s + " value = " + map.get(s));
}