簡體   English   中英

在HashMap中使用鍵檢索值而不使用迭代器

[英]Retrieve value using key without using iterator in 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();
            }
        }
    }

我不想讓我的應用程序變慢。 因此,我寧願直接在鍵的幫助下檢索值,而無需使用迭代器或for循環。 我該如何實現?

幫助將不勝感激。

我不認為可以直接執行此操作,但是您可以對整個地圖進行初始遍歷,然后將其轉換為使用鍵作為鍵的地圖。 至少通過這種方式,您只需要遍歷整個值一次即可。

因此,如果您使用類似

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; 
}

然后,您可以使用此新對象通過其String鍵快速獲取其他標簽:

Map<String, LabelModel> reIndexed = reIndex(labeHashlMap);
reIndexed.get("please_select_governorate");
reIndexed.get("what_ever_else");

假定鍵相對於大小寫是唯一的。

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

如果嘗試使用不存在的鍵獲取值,則哈希映射將僅返回null。

我認為您應該進行初始遍歷,即遍歷JSON。 因為從JSON到HashMap的映射也是迭代的,所以可以避免。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM