Значения null могут привести к NullPointerException, если ваш компаратор не обрабатывает их явно.
Вот код, представленный на изображении:
Без использования
nullsFirst или nullsLast:public class BadSortingExample {
static class Person {
String name;
Integer age;
Person(String name, Integer age) {
this.name = name;
this.age = age;
}
Integer getAge() {
return age;
}
@Override
public String toString() {
return name + " (" + age + ")";
}
}
public static void main(String[] args) {
List<Person> people = Arrays.asList(
new Person("Alice", 30),
new Person("Bob", null), // null age
new Person("Charlie", 25)
);
// This crashes at runtime
people.sort(Comparator.comparing(Person::getAge));
people.forEach(System.out::println);
}
}С использованием
nullsFirst:public class GoodSortingExample {
static class Person {
String name;
Integer age;
Person(String name, Integer age) {
this.name = name;
this.age = age;
}
Integer getAge() {
return age;
}
@Override
public String toString() {
return name + " (" + age + ")";
}
}
public static void main(String[] args) {
List<Person> people = Arrays.asList(
new Person("Alice", 30),
new Person("Bob", null), // null age handled safely
new Person("Charlie", 25)
);
// Safe: null ages go FIRST
people.sort(
Comparator.comparing(
Person::getAge,
Comparator.nullsFirst(Integer::compareTo)
)
);
people.forEach(System.out::println);
}
}В первом примере (BadSortingExample) код вызывает NullPointerException, так как возраст у одного из объектов null, и компаратор не обрабатывает это.
Во втором примере (GoodSortingExample) используется Comparator.nullsFirst(), что позволяет безопасно сортировать объекты, даже если одно из значений для возраста отсутствует.
👉 Java Portal