lambda 표현식list 정렬

1717 단어 Java 기반

1 배경


대상list를 정렬합니다. 정렬 필드는 대상의sortNum입니다. 정렬하기 전에sortNum이null인 대상을 제거합니다.
 
정렬 대기 bean 정의
public class TestBean {
    private Integer id;
    private String name;
    private Integer sortNum;
}

정렬에 실패한 CASE 2개

list.stream().filter(testBean -> testBean != null && testBean.getSortNum() != null)
        .collect(Collectors.toList()).sort(Comparator.comparing(TestBean::getSortNum));

 

3 올바른 정렬


정렬 성공:
List listNew = list.stream().filter(testBean -> testBean != null && testBean.getSortNum() != null)
        .sorted(Comparator.comparing(TestBean::getSortNum)).collect(Collectors.toList());

요약:
list.stream.filter.collect.sort 정렬 없음,list.stream.filter.sorted.collect 정렬했습니다.
물론 sortNum이 비어 있는 대상을 제거하지 않아도 됩니다.
list.sort(Comparator.comparing(TestBean::getSortNum));

물론 이런 정렬은sortNum이 비어 있는 대상이 되면 빈 바늘 이상을 던진다.
 
만약 빈 값이 있는 대상을 정렬하려고 한다면, 이 대상들을 제거하고 싶지 않고, NPE가 있기를 원하지 않는다면 어떻게 하겠는가?
1) 정수 및 빈 값 앞
list.sort(Comparator.comparing(TestBean::getSortNum, Comparator.nullsFirst(Comparator.naturalOrder())));

2) 정수 및 빈 값 뒤에 정렬
list.sort(Comparator.comparing(TestBean::getSortNum, Comparator.nullsLast(Comparator.naturalOrder())));

3) 역순 및 빈 값 앞
list.sort(Comparator.comparing(TestBean::getSortNum, Comparator.nullsFirst(Comparator.reverseOrder())));

4) 역순 및 빈 값 뒤에 정렬
list.sort(Comparator.comparing(TestBean::getSortNum, Comparator.nullsLast(Comparator.reverseOrder())));

좋은 웹페이지 즐겨찾기