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
'Languages > Java' 카테고리의 다른 글
[Java] 2차원 배열 정렬하기 (0) | 2025.01.29 |
---|---|
[Java] try-with-resources 예외 처리 (0) | 2024.08.22 |
[Java] Scanner vs BufferedReader 사용자 입력 받기 (0) | 2024.08.08 |
[Java] 깊은 복사(Deep Copy)와 얕은 복사(Shallow Copy) (0) | 2024.06.28 |
[Java] == 과 equals()로 문자열 비교하기 (0) | 2024.06.28 |