2012-04-18 14 views
2

ハッシュマップをオブジェクトの値でソートするとします。この場合、国コードで指定します。次のようにハッシュマップ内のオブジェクトの値をソートする<String、Object>

KEY    OBJECT       
    String  LoyaltyCountry 
        - country name 
        - country code 
        - country loc 

私のコードは次のとおりです。

public static HashMap<String, LoyaltyCountry> loyaltyCountrySortMap(HashMap<String, LoyaltyCountry> loyaltyCountryMap) { 

      if (loyaltyCountryMap != null) { 
       List keys = new ArrayList(); 
       keys.addAll(loyaltyCountryMap.keySet()); 
       Collections.sort(keys, new Comparator<LoyaltyCountry>() { 
        public int compare(LoyaltyCountry o1, LoyaltyCountry o2) { 
         return o1.getCountryName().compareTo(o2.getCountryName()); 
        } 
       }); 
      } 

      return loyaltyCountryMap; 
     } 

私はこれを正しく行うことができますどのように?

+0

あなたはHashMapの自分自身をソートするためにしようとしていますか?または、キーをソートしようとしていますか?または値ですか?どうか明らかにしてください。あなたのコードは、キーをソートすることを意味するようです。 – lrAndroid

+0

ハッシュマップ...値(国名) – newbie

+2

可能な複製http://stackoverflow.com/q/10167278/1332690 –

答えて

7

Map.Entryアイテムが値でソートされたSetを返すメソッドです。

public static <K, V extends Comparable<? super V>> SortedSet<Map.Entry<K, V>> entriesSortedByValues(Map<K, V> map) { 
    SortedSet<Map.Entry<K, V>> sortedEntries = new TreeSet<Map.Entry<K, V>>(
      new Comparator<Map.Entry<K, V>>() { 
       @Override 
       public int compare(Map.Entry<K, V> e1, Map.Entry<K, V> e2) { 
        return e1.getValue().compareTo(e2.getValue()); 
       } 
      }); 
    sortedEntries.addAll(map.entrySet()); 
    return sortedEntries; 
} 
+1

あなたの心の読書能力は私よりもはるかに優れています:) –

+0

私はちょうど最近この問題にぶつかってしまったので、貼り付けコード私はすでに持っていた:) –

+0

私はどのようにソートセットをHashMapに変更できますか? – newbie

1

Comparator<Map.Entry<String,LoyaltyCountry>>を作成し、Map.entrySet()を取得し、List<Map.Entry<String,LoyaltyCountry>>に入れて並べ替えます。

明確化:HashMapを値でソートしたいとします。これは起こりません。 HashMapは、Mapのソートされていない実装です。さらに、Mapのソートされた実装はすべてキーをソートするので、TreeMapの場合でも役に立ちません。

あなたが最も近いところに来ることができれば(自分のマップの実装には手を付けていない)、地図のエントリのリストが作成されます。

+0

?????????????????????????????????????????????? – newbie

+0

これはhttp://stackoverflow.com/a/10167282/771837の高度な解説です – trutheality

1

HashMapをソートすることはできません。

地図の値の順序付きリストを国名で並べ替えるように見えます。リストに、方法の変更の戻り値の型については

、例えば

public static List<LoyaltyCountry> loyaltyCountrySortMap(
    HashMap<String, LoyaltyCountry> loyaltyCountryMap 
) 
{ 

    if (loyaltyCountryMap != null) { 
     List<LoyaltyCountry> values = new ArrayList(); 
     values.addAll(loyaltyCountryMap.values()); 
     Collections.sort(values, new Comparator<LoyaltyCountry>() { 
      public int compare(LoyaltyCountry o1, LoyaltyCountry o2) { 
       return o1.getCountryName().compareTo(o2.getCountryName()); 
      } 
     }); 

     return values; 
    } 

    return null; 
} 
+0

しかし、どのように私はキーとそれを関連付けることができますか? – newbie

+0

@newbie。 Sarel Bothaのアドバイスに従ってください。 –

関連する問題