Java 在HashMap中使用键而不使用迭代器检索值

Java 在HashMap中使用键而不使用迭代器检索值,java,android,hashmap,Java,Android,Hashmap,我想根据HashMap中的键检索值。我可以使用下面的代码从hashmap中获取基于键的值。我得到了完美的结果。我相信每次从1000+记录中循环一个值都不是一个好主意。它使应用程序的速度慢得多 下面是一组带有for循环的代码 HashMap<Integer, LabelModel> labelHashMap = gson.fromJson(storedHashMapString, type); for(Map.Entry<Integer, LabelModel>

我想根据HashMap中的键检索值。我可以使用下面的代码从hashmap中获取基于键的值。我得到了完美的结果。我相信每次从1000+记录中循环一个值都不是一个好主意。它使应用程序的速度慢得多

下面是一组带有for循环的代码

 HashMap<Integer, LabelModel> labelHashMap = gson.fromJson(storedHashMapString, type);

    for(Map.Entry<Integer, LabelModel> entry:labelHashMap.entrySet())
    {
        LabelModel label = entry.getValue();
        key = label.getKey();
        if(key != null && !key.isEmpty())
        {
            if(key.equalsIgnoreCase("please_select_governorate"))
            {
                english_label = label.getEnglish();
                arabic_label = label.getArabic();
            }
        }
    }
HashMap labelHashMap=gson.fromJson(storedHashMapString,类型);
for(Map.Entry:labelHashMap.entrySet())
{
LabelModel label=entry.getValue();
key=label.getKey();
if(key!=null&&!key.isEmpty())
{
if(关键同等信号情况(“请选择省”))
{
english_label=label.getEnglish();
阿拉伯文标签=label.getArabic();
}
}
}
我不想让我的应用程序变慢。因此,我更愿意直接使用key来检索值,而不使用迭代器或for循环。我怎样才能做到这一点

我们将不胜感激

if(labelHashMap.get("something") != null){ code }

如果您试图用一个不存在的键获取一个值,那么哈希映射将简单地返回null。

我认为不可能直接这样做,但是您可以对整个映射进行初始传递,并将其转换为使用sting键作为键的映射。至少这样,您只需在整个值集上迭代一次

所以如果你使用一种方法,比如

Map<String, LabelModel> reIndex(HashMap<Integer, LabelModel> labelMap) {
    Map<String, LabelModel> reIndexedLabelMap = new HashMap<>();
    for(Map.Entry<Integer, LabelModel> entry:labelMap.entrySet()) {
        LabelModel label = entry.getValue();
        String key = label.getKey();
        reIndexedLabelMap.put(key.toLowerCase(), label); 
    }
    return reIndexedLabelMap; 
}
Map-reIndex(HashMap-labelMap){
Map reIndexedLabelMap=新HashMap();
对于(Map.Entry:labelMap.entrySet()){
LabelModel label=entry.getValue();
String key=label.getKey();
reIndexedLabelMap.put(key.toLowerCase(),label);
}
返回reIndexedLabelMap;
}
然后,您可以使用此新对象通过其字符串键快速获取任何其他标签:

Map<String, LabelModel> reIndexed = reIndex(labeHashlMap);
reIndexed.get("please_select_governorate");
reIndexed.get("what_ever_else");
Map-reIndex=reIndex(labeHashlMap);
重新编制索引。获取(“请选择省”);
重新编制索引。获取(“还有什么”);

假设键在大小写方面是唯一的。

我认为您应该进行初始传递,即在JSON上迭代。因为从JSON到HashMap的映射也是迭代的,这是可以避免的。

我可以知道投票失败的原因吗?你的问题让人困惑,你应该更清楚你想要实现什么。你问这个问题的方式已经让两个人误解并回答错误了。@Oleg希望你现在理解了这个问题我第一次理解了。它仍然让人困惑,当你说HashMap中的
键时,它意味着
映射的键如果你想要基于
键的属性的东西,那么
映射的值应该更加明确。正如@EJP所说的,您应该创建所需的映射。使用当前地图,您所能做的就是循环。您的意思是编辑您的问题?说得更清楚些?你的代码无法编译。OP的当前键是一个
整数
。谢谢@Oleg这是什么?非常感谢@evan在这里出错。表达式应为映射reIndex(HashMap labelMap)