En utilisant à la fois Java 8 et Java 11, tenez compte des éléments suivants TreeSet
avec un String::compareToIgnoreCase
comparateur:
final Set<String> languages = new TreeSet<>(String::compareToIgnoreCase);
languages.add("java");
languages.add("c++");
languages.add("python");
System.out.println(languages); // [c++, java, python]
Lorsque j'essaie de supprimer les éléments exacts présents dans le TreeSet
, cela fonctionne: tous ceux spécifiés sont supprimés:
languages.removeAll(Arrays.asList("PYTHON", "C++"));
System.out.println(languages); // [java]
Cependant, si j'essaie de supprimer à la place plus que ce qui est présent dans le TreeSet
, l'appel ne supprime rien du tout (ce n'est pas un appel ultérieur mais appelé à la place de l'extrait ci-dessus):
languages.removeAll(Arrays.asList("PYTHON", "C++", "LISP"));
System.out.println(languages); // [c++, java, python]
Qu'est-ce que je fais mal? Pourquoi se comporte-t-il de cette façon?
Modifier: String::compareToIgnoreCase
est un comparateur valide:
(l, r) -> l.compareToIgnoreCase(r)