2017-10-14 92 views
0

我想根据HashMap中的密钥检索值。我可以使用下面的代码从hashmap获得基于密钥的值。我有完美的结果。我相信每次从循环的值1000+记录不是一个好主意。它使应用程序变得更慢。在HashMap中使用密钥而不使用迭代器检索值

下面是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(); 
      } 
     } 
    } 

我不想让我的应用变慢。所以,我宁愿直接检索值的帮助下,而不使用迭代器或for循环。我怎样才能做到这一点?

帮助将不胜感激。

+0

我可以知道投票原因吗? – Jacky

+2

你的问题很混乱,你应该更清楚你想达到什么目的。用你问它的方式,你已经让2个人误解了它,并且错误地回答了。 – Oleg

+0

@Oleg希望你现在能够理解这个问题 – Jacky

回答

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

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

+3

您的代码无法编译。 OP的当前键是一个“整数”。 – Oleg

1

我不认为有可能直接做,但是您可以在整个地图上进行初始传递,并将其转换为使用刺键作为关键点的地图。至少这样你只需要遍历整个值集合一次。

所以如果你使用的方法类似

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<String, LabelModel> reIndexed = reIndex(labeHashlMap); 
reIndexed.get("please_select_governorate"); 
reIndexed.get("what_ever_else"); 

假设键是具有独特尊重案件。

+0

谢谢@Oleg那是什么? –

+0

够公平的,已经更新了答案。 –

+0

非常感谢@Evan – Jacky

0

我想你应该做一个初始传递,即遍历JSON。因为从JSON到HashMap的映射也是迭代的,你可以避免这种情况。

相关问题