TGViewer
Java Portal | Программирование Java Portal | Программирование @java_iibrary · 11.6K subscribers
Post #2256 1.83K
Java: Используйте Comparator.nullsFirst() или Comparator.nullsLast() для безопасной сортировки.

Значения 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
  • ❤ 5
  • 👍 2
More from @java_iibrary
  1. Sep 24, 2026Многие разработчики используют Java каждый день. Но мало кто знает, почему он стал одним и…
  2. Sep 24, 2026Java-разработчики, в чём разница между volatile и synchronized? Многие используют их. Но в…
  3. Sep 23, 2026Готовимся к System Design интервью уровня Middle и Senior Полезный конспект по проектирова…
  4. Sep 23, 2026Java-разработчики, знаете разницу между Shallow Copy и Deep Copy? Вы копируете объект, но…
  5. Sep 22, 2026Java-разработчики: Почему ArrayList увеличивает свою ёмкость примерно на 50%, когда заканч…
  6. Sep 22, 2026Прогрев от Java-бабули 🙂 👉 Java Portal
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →