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

 

https://yoonnyoon.tistory.com/131