Сортировка строк без учета регистра в Java 8
Как сортировать строковые значения в нечувствительном к регистру порядке в данном примере?
List<Employee> listofEmployees = Arrays.asList(
new Employee(1, "aaa", Arrays.asList(123, 345, 678)),
new Employee(1, "bbb", Arrays.asList(91011, 121314, 1516117)),
new Employee(2, "ccc", Arrays.asList(181920, 212223, 242526)),
new Employee(3, "ddd", Arrays.asList(272829, 303132, 333435)),
new Employee(4, "BBB", Arrays.asList(29, 332, 33))
);
Я написал код, как показано ниже:
listofEmployees.stream().sorted(Comparator.comparing(Employee::getName).reversed())
.forEach(s -> System.out.println(s.getName()));
Как мне передать опцию нечувствительности к регистру при сортировке строк?
5 ответ(ов)
Попробуйте использовать следующий код:
Comparator.comparing(Employee::getName, String.CASE_INSENSITIVE_ORDER)
Этот код позволяет создать компаратор для объектов типа Employee
, который будет сравнивать их по имени, игнорируя регистр букв. Это может быть полезно, если вам нужно сортировать сотрудников в алфавитном порядке без учета верхнего и нижнего регистра.
Вы можете задать это в качестве второго аргумента для игнорирования регистра:
Comparator.comparing(Employee::getName, String::compareToIgnoreCase).reversed()
Этот код позволяет сравнивать имена сотрудников без учета регистра и затем упорядочивает результат в обратном порядке.
Это один из способов решения задачи:
listofEmployees.stream()
.sorted((o1, o2) -> o1.getName().compareToIgnoreCase(o2.getName()))
.forEach(s -> System.out.println(s.getName()));
В этом примере мы используем поток (stream) для сортировки списка сотрудников (listofEmployees
) по именам, игнорируя регистры. Далее, после сортировки, выводим имена каждого сотрудника на консоль.
Похоже, что существует компаратор, который сортирует объекты типа String с помощью метода compareToIgnoreCase
. Вы можете ознакомиться с документацией по этому вопросу здесь: java.lang.String.CASE_INSENSITIVE_ORDER.
Comparator.comparing(Employee::getName, String.CASE_INSENSITIVE_ORDER)
Этот код создает компаратор, который сравнивает объекты Employee
по имени (name
), игнорируя регистр букв. Если требуется сравнить сотрудников по имени без учета регистра, это решение отлично подходит. После использования этого компаратора, например, для сортировки списка сотрудников, имена будут упорядочены корректно вне зависимости от того, использованы ли в них заглавные или строчные буквы.
Лично у меня такой подход сработал без проблем!
Java 8: Преобразование List<V> в Map<K, V>
Найти первый элемент по предикату
Есть ли краткий способ итерации по стриму с индексами в Java 8?
Java 8 Iterable.forEach() против цикла foreach: что выбрать?
"Новая инстанциация объектов при использовании потоков Java 8"