개발_웹/Java

Java | 컬렉션(Collection), 맵(Map) 정렬하기

zuyo 2019. 5. 10. 22:03
반응형

Map은 Key-Value 구조로 이루어져 있으며, Key는 Set, Value는 List로 구성되어있다.
Key를 기준으로 정렬하려면 TreeMap을 사용하면 된다.
Value를 기준으로 Map을 정렬하는 방법과 멤버변수를 기준으로 Collection을 정렬하는 방법을 알아보자.

1. Value 값들을 List로 추출 

Map인 경우 Value 값들을 List로 추출해준다.

list = new ArrayList<>(map.values());

2. Comparator 만들기

Comparator 인터페이스를 구현하는 클래스를 만들어 compare() 메소드를 재정의 한다.
compare() 메소드는 비교할 두 대상을 파라미터로 받고, 결과에 따라 -1, 0, 1을 반환한다.
반대로 정렬 시에는 클래스를 또 만들어줘도 되지만, Collections의 reverse()메소드를 사용하면 간단하게 순서를 반대로 만들 수 있다.

    // 이름 오름차순 정렬
    public class NameAscCompare implements Comparator<Student> {
        @Override
        public int compare(Student a, Student b) {
            return a.getName().compareTo(b.getName());
        }
    }
    // 성적 내림차순 정렬
    public class ScoreDescCompare implements Comparator<Student> {
        @Override
        public int compare(Student o1, Student o2) {
            return o1.getAvg() < o2.getAvg() ? 1 : o1.getAvg() > o2.getAvg() ? -1 : 0;
        }
    }

3. sort() 메소드

Collections의 sort() 메소드를 사용하여 List를 정렬한다. 

Collections.sort(list, new NameAscCompare()); // 이름 오름차순으로 정렬하여 list에 저장
Collections.sort(list, new AvgDescCompare()); // 성적 내림차순으로 정렬하여 list에 저장

 

반응형