#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());
Подробнее читайте здесь.