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으로 추출해서 위와 같이 처리하면 쉽게 해결할 수 있다.
끝.
댓글남기기