web-dev-qa-db-fra.com

Tri de la valeur de la chaîne de manière non sensible à la casse dans Java 8

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?

21
Learn Hadoop

Essaye ça

Comparator.comparing(Employee::getName, String.CASE_INSENSITIVE_ORDER)
50
Hadi J

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");
}
11
Oleksandr Pyrohov

Vous pouvez le spécifier comme deuxième argument pour ignorer les cas:

Comparator.comparing(Employee::getName, String::compareToIgnoreCase).reversed()
7
Schidu Luca

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()));
3
shakhawat

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

1
genhernandez