[Java] HashMap value(값) 기준으로 정렬하기

joy0987·2023년 10월 31일
0

Java

목록 보기
6/6
post-thumbnail

프로그래머스 2단계를 풀다보니 값 기준으로 정렬이 필요한 경우가 많아서 정리하려한다.


Collections.sort()를 사용하기 위해서

  1. Map.entrySet() 을 이용하여 List 형태로 Map을 저장한다.
  2. EntrySet을 정렬한다.

2번은 여러가지 방식으로 구현할 수 있다.



Entry 내장 함수 comparingByValue()

Map.Entry 안의 comparingByValue() 함수를 사용한다.

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 LinkedList<>(map.entrySet());
entryList.sort(Map.Entry.comparingByValue());
for(Map.Entry<String, Integer> entry : entryList){
    System.out.println("key : " + entry.getKey() + ", value : " + entry.getValue());
}

Comparator 인터페이스

내가 가장 자주 사용하는 방법이다. Comparator 인터페이스를 사용한다.

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 LinkedList<>(map.entrySet());
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();
    }
});
// o1, o2 순서를 바꾸면 내림차순 정렬이 된다.

for(Map.Entry<String, Integer> entry : entryList){
    System.out.println("key : " + entry.getKey() + ", value : " + entry.getValue());
}

람다 함수

Comparator를 람다로 단순하게 작성할 수 있다.

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 LinkedList<>(map.entrySet());
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());
}



Reference

profile
아자아자

0개의 댓글

관련 채용 정보