2017-10-14 3 views
0

ハッシュマップからキーに基づいて値を取得したいと考えています。私はハッシュマップからキーの値に基づいて以下のコードを使用することができます。私は完璧な結果を得ている。私は毎回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(); 
      } 
     } 
    } 

私のアプリケーションの速度を落としたくありません。ですから、私はiteratorまたは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へのマッピングも反復的であるため、避けることができます。

関連する問題