똑같은 삽질은 2번 하지 말자

Map <String,Integer> Value 값의 기준으로 Key정렬 (오름차순, 내림차순) 본문

Java

Map <String,Integer> Value 값의 기준으로 Key정렬 (오름차순, 내림차순)

곽빵 2020. 6. 2. 15:41

가끔 문제를 풀 경우, Map을 정렬하는 경우가 많다! Key에 관한 정렬은 TreeMap을 사용한다면

별도의 구현없이 정렬이 가능하다. 단, String, Integer 와 같은 기본형에만 해당된다.

만약 객체를 특정 인스턴스 변수 기준으로 정렬하고 싶다면, Comparable 을 이용한 정렬이 필요하다.

해당 객체를 생성하는 클래스에서 Comparable 인터페이스를 implements 하거나,

혹은 아래와 같은 방식으로 익명객체, 람다식을 활용할 수 있다. 하지만, 이번 예제에서는

Map의 Value에 대한 정렬을 해볼려고 한다. 정렬하는 방법을 익명객체와 람다식을 활용해서 구현했다.

 

public class ValueSortExample {
 
    public static void main(String[] args) {
        Map<string, string=""> map = new HashMap<>();
         
        map.put("A", "29");
        map.put("C", "19");
        map.put("D", "31");
        map.put("B", "15");
         
        List<string> keySetList = new ArrayList<>(map.keySet());
        // 내림차순 //
        Collections.sort(keySetList, new Comparator<string>() {
            @Override
            public int compare(String o1, String o2) {
                return map.get(o2).compareTo(map.get(o1));
            }
        });
         
        for(String key : keySetList) {
            System.out.println(String.format("Key : %s, Value : %s", key, map.get(key)));
        }
         
        System.out.println("-----------------------------------------------------------------");
         
        // 오름차순 //
        Collections.sort(keySetList, (o1, o2) -> (map.get(o1).compareTo(map.get(o2))));
         
        for(String key : keySetList) {
            System.out.println(String.format("Key : %s, Value : %s", key, map.get(key)));
        }
 
    }
 
}
Comments