2개의 리스트가 있고, 정렬된 하나의 리스트를 기준으로 나머지 하나의 리스트를 정렬해야 하는 경우에 Java8에서 추가된 List의 sort 메소드와 Comparator를 이용해서 쉽게 처리할 수 있다.

List<String> levels = Arrays.asList("S", "A", "B", "C");

List<Member> members = Arrays.asList(
        Member.builder().name("홍길동").level("B").build(),
        Member.builder().name("김영희").level("C").build(),
        Member.builder().name("이민수").level("S").build(),
        Member.builder().name("박지연").level("A").build()
);

위 예제의 level 정보는 이미 정렬되어 있고, 이 level 기준으로 members를 정렬해야 한다고 가정해 보자. 이럴때 sort 메소드를 이용하면 된다.

members.sort(Comparator.comparing(member -> levels.indexOf(member.getLevel())));

정렬된 결과를 출력해 보면, 잘 처리된 것을 확인할 수 있다.

Sort.Member(name=이민수, level=S)
Sort.Member(name=박지연, level=A)
Sort.Member(name=홍길동, level=B)
Sort.Member(name=김영희, level=C)

정렬의 기준이 되는 리스트가 복잡한 형태의 클래스이더라도 정렬 기준 값을 stream과 map으로 추출해서 위와 같이 처리하면 쉽게 해결할 수 있다.

끝.

태그:

카테고리:

업데이트:

댓글남기기