Hem Java 8 hem de Java 11'i TreeSet
kullanarak bir String::compareToIgnoreCase
karşılaştırıcı ile aşağıdakileri göz önünde bulundurun :
final Set<String> languages = new TreeSet<>(String::compareToIgnoreCase);
languages.add("java");
languages.add("c++");
languages.add("python");
System.out.println(languages); // [c++, java, python]
Ben mevcut kesin öğeleri kaldırmaya çalıştığınızda TreeSet
çalışır: belirtilen tüm kaldırılır:
languages.removeAll(Arrays.asList("PYTHON", "C++"));
System.out.println(languages); // [java]
Ancak, yerine mevcut olandan daha fazla kaldırmaya çalışırsanız TreeSet
, çağrı hiçbir şey kaldırmaz (bu sonraki bir çağrı değildir, ancak yukarıdaki snippet yerine çağrılır):
languages.removeAll(Arrays.asList("PYTHON", "C++", "LISP"));
System.out.println(languages); // [c++, java, python]
Neyi yanlış yapıyorum? Neden bu şekilde davranıyor?
Düzenle: String::compareToIgnoreCase
geçerli bir karşılaştırıcıdır:
(l, r) -> l.compareToIgnoreCase(r)