2012-04-18 7 views
2

개체 값으로 해시 맵을 정렬하려고합니다. 이 경우 국가 코드별로 확인하십시오.해시 맵 내에서 개체 값 정렬 <String, Object>

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

가 어떻게 제대로이 작업을 수행 할 수 있습니다 다음과 같이

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

내 코드는?

+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

어떻게 SortedSet을 HashMap으로 바꿀 수 있습니까? – newbie

1

Comparator<Map.Entry<String,LoyaltyCountry>>을 만들고 Map.entrySet()을 얻은 다음 List<Map.Entry<String,LoyaltyCountry>>에 넣고 정렬합니다.

설명 : HashMap을 값순으로 정렬하려고합니다. 즉, 그렇게되지는 않을 것입니다. HashMapMap의 정렬되지 않은 구현입니다. 또한, 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의 조언을 따르십시오. –