Java

Java - 컬렉션 정렬 시 Null safe

codeManager 2024. 6. 21. 23:23
반응형


자바8부터 도입된 Stream을 이용하면 Collection을 정렬할 수 있다.

 

Comparator 클래스를 이용해서 쉽게 정렬이 가능하다.

 

List<Person> list = Arrays.asList(Person.of(30), Person.of(35));

List<Person> sortedList = list.stream()
        .sorted(Comparator.comparing(Person::getAge))
        .collect(toList());

 

Comparator.comparing() 메서드에 람다식을 넘겨서 age를 기준으로 정렬이 가능하다.

 

그런데 이 때 Person의 age가 Null인 경우가 발생하면 정렬하는 중에 NPE가 발생한다.

 

이럴 경우 NullPointerException을 방지하기 위해서 Comparator.nullsFirst(), Comparator.nullsLast()를 사용한다.

 

List<Person> list = Arrays.asList(Person.of(30), Person.of(null), Person.of(35));

List<Person> sortedList = list.stream()
        .sorted(Comparator.comparing(Person::getAge, Comparator.nullsLast(Comparator.naturalOrder())))
        .collect(toList());

 

결과는 30, 35, null 로 정렬된다.

 

이렇게 Comparator.nullsLast()를 사용하면 null인 경우에는 뒤쪽으로 정렬이 된다.

 

Comparator.nullsFirst()를 사용하면 null인 경우가 제일 앞으로 오게 된다.

 

 

 

 

 
반응형