Java упорядочивает список объектов по нулевым полям

#java #sorting #collections #null #comparator

#java #сортировка #Коллекции #null #компаратор

Вопрос:

У меня есть список объектов, например, студентов. У ученика есть имя, отчество и фамилия. `

Допустим, для целей этого примера каждое поле может быть нулевым. Я хотел бы упорядочить список так, чтобы все нулевые поля перемещались в конец списка, а все ненулевые значения — вверху.

Мне не нужно заказывать на основе фактических ненулевых значений.

Пример:

 [
    Harry, John, Carter,
    Tony, Thomas, Holmes,
    John, null, Chavez,
    null, Micharl, Heinz,
    null, null, Simpson,
    null, null, null
]
  

Возможно ли иметь один компаратор для достижения этой цели или мне нужны отдельные?

Комментарии:

1. Я надеюсь, что ваш учитель назначил имя, отчество и фамилию. Реальные имена намного сложнее.

2. Итак, вы хотите разделить объекты на их поля, переместить поля в конец списка, чтобы в конце была куча бессмысленных значений? Student null null Или вы хотите отсортировать список учащихся, чтобы переместить учащихся с нулевыми полями в конец? Затем, что происходит с учащимися с некоторыми пустыми полями и некоторыми ненулевыми полями?

Ответ №1:

Вы можете создать функцию, которая принимает всю информацию о студенте и определяет приоритет на основе информации и возвращает значение приоритета.

  • Если все поля не являются нулевыми — значение приоритета 1
  • Если все поля пустые — значение приоритета 3
  • Else для другого случая — значение приоритета 2

Затем сортируйте по значению приоритета с помощью компаратора

 studentList.sort(Comparator.comparing(s -> getPriority(s)));
  

Ответ №2:

Вы можете использовать Guava (Java core library от Google):

 List<Integer> toSort = Arrays.asList(3, 5, 4, null, 1, 2);
Collections.sort(toSort, Ordering.natural().nullsLast()); // sorting nulls last
assertThat(toSort.get(toSort.size() - 1), nullValue());
  

Подробнее читайте здесь.