Comment trier les valeurs de chaîne dans un ordre insensible à la casse comme suit?
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))
);
J'ai écrit comme ceci:
listofEmployees.stream().sorted(Comparator.comparing(Employee::getName).reversed())
.forEach(s -> System.out.println(s.getName()));
Comment passer une option insensible à la casse des chaînes ici?
Essaye ça
Comparator.comparing(Employee::getName, String.CASE_INSENSITIVE_ORDER)
Comme l'a suggéré @Tree dans les commentaires, on peut utiliser le Java.text.Collator
pour une comparaison String
insensible à la casse et sensible aux paramètres régionaux. Ce qui suit montre comment la casse et les accents peuvent être ignorés pour l'anglais américain:
Collator collator = Collator.getInstance(Locale.US);
collator.setStrength(Collator.PRIMARY);
listOfEmployees.sort(Comparator.comparing(Employee::getName, collator.reversed()));
Lorsque la force du collecteur est définie sur PRIMARY
, seules les différences PRIMARY
sont considérées comme significatives lors de la comparaison. Par conséquent, les chaînes suivantes sont considérées comme équivalentes:
if (collator.compare("abc", "ABC") == 0) {
System.out.println("Strings are equivalent");
}
Vous pouvez le spécifier comme deuxième argument pour ignorer les cas:
Comparator.comparing(Employee::getName, String::compareToIgnoreCase).reversed()
C'est l'une des nombreuses façons:
listofEmployees.stream()
.sorted((o1, o2) -> o1.getName().compareToIgnoreCase(o2.getName()))
.forEach(s -> System.out.println(s.getName()));
Il semble qu'il y ait un comparateur qui ordonne les objets String comme compareToIgnoreCase, vous pouvez lire la documentation ici: https://docs.Oracle.com/javase/8/docs/api/Java/lang/String. html # CASE_INSENSITIVE_ORDER