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