실은 그다지 복잡한 정렬은 아니다.(실은 나한텐 복잡하다)
가정: Student라는 클래스가 있다. 이것은 수업 점수가 담긴 Map Score를 갖고 있다. 그런데 학생마다 Score에 담긴 값이 다르다. 어떤 학생은 수학 수업을 듣지 않아, math에 대한 점수가 없고, 어떤 학생은 컴퓨터 수업을 듣지 않아 computer에 대한 점수가 없다.
여기서 나는 과목 점수를 기준으로 학생들을 정렬할 것이다. 따라서 어떤 학생은 기준이 되는 과목이 없을 수도 있다.
처음에 compareTo메소드를 사용하려고 했으나, 기준이 명확하지 않고, 보편적인 것이 아니기 때문에 포기했다. => 내가 방법을 못찾은 것이지, compareTo 메소드를 사용해서 할 수도 있을 것이다.
그 후에 방법을 고민하다 IDE의 자동완성이 힌트를 줬다.(IDE가 준 영감) Collections의 sort 메소드를 사용했다. 이 메소드는 리스트와 Comparator가 구현된 클래스를 매개값으로 받는다. 그러면 Comparator가 갖고 있는 compareTo 메소드를 사용해 정렬한다. 그런데 람다식을 이용하면, 바로 compareTo 메소드를 작성해서 사용할 수 있다.
이 방법의 장점은 정렬 기준이 되는 것이 바뀌거나, 값이 없더라도 비교를 할 수 있다.
// sort는 정렬 기준이 담긴 문자열이다.
Collections.sort(eventSummaryList, (o1, o2) -> {
int a = 0, b = 0;
if (o1.getScores().containsKey(sort)) {
a = o1.getScores().get(sort);
}
if (o2.getScores().containsKey(sort)) {
a = o2.getScores().get(sort);
}
return b - a;
});
'study > java' 카테고리의 다른 글
자바 코딩 테스트 삽질 - 마침표로 split 하기 (0) | 2021.04.30 |
---|---|
엉터리 정리 - map(), orElseGet() (0) | 2021.04.08 |
엉터리 정리 - java.util.Optional<T> (0) | 2021.03.25 |
자바/JAVA JAR (0) | 2021.03.15 |
자바/JAVA 스트림(Stream) (0) | 2021.03.13 |