Languages/Java
[Java] Map을 Value 값으로 오름차순, 내림차순 정렬하기
효딩
2025. 1. 20. 22:12
HashMap을 Value 값으로 정렬하려면 어떻게 해야 할까?
Value 기준으로 정렬하기 위해서는
List 형태로 Map을 가져와야 한다.
Map.entrySet()을 이용해서 Map의 EntrySet을 List 형태로 저장하고 이 EntrySet을 정렬한다.
Map<String, Integer> map = new HashMap<>();
map.put("a", 3);
map.put("b", 2);
map.put("c", 1);
List<Map.Entry<String, Integer>> entryList = new ArrayList<>(map.entrySet);
Entry 내장 함수 사용
먼저 Map.Entry에 있는 comparingByValue() 함수를 사용하여 정렬할 수 있다.
entryList.sort(Map.Entry.comparingByValue());
for (Map.Entry<String, Integer> entry : entryList) {
System.out.println("key: " + entry.getKey() + ", value: " + entry.getValue());
}
// key: c, value: 1
// key: b, value: 2
// key: a, value: 3
comparator 사용
entryList.sort(new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o1.getValue() - o2.getValue();
}
});
for(Map.Entry<String, Integer> entry : entryList){
System.out.println("key : " + entry.getKey() + ", value : " + entry.getValue());
}
//key : c, value : 1
//key : b, value : 2
//key : a, value : 3
람다 함수 사용
entryList.sort(((o1, o2) -> map.get(o1.getKey()) - map.get(o2.getKey())));
for(Map.Entry<String, Integer> entry : entryList){
System.out.println("key : " + entry.getKey() + ", value : " + entry.getValue());
}
//key : c, value : 1
//key : b, value : 2
//key : a, value : 3