为什么使用自定义比较器从树集中删除不删除更大的项目集?
2022-09-02 04:18:08
同时使用 Java 8 和 Java 11,请考虑以下带有 String::compareToIgnoreCase
比较器的 TreeSet
:
final Set<String> languages = new TreeSet<>(String::compareToIgnoreCase);
languages.add("java");
languages.add("c++");
languages.add("python");
System.out.println(languages); // [c++, java, python]
当我尝试删除 中存在的确切元素时,它的工作原理是:所有指定的元素都将被删除:TreeSet
languages.removeAll(Arrays.asList("PYTHON", "C++"));
System.out.println(languages); // [java]
但是,如果我尝试删除比 TreeSet
中存在的更多内容,则调用根本不会删除任何内容(这不是后续调用,而是调用而不是上面的代码段):
languages.removeAll(Arrays.asList("PYTHON", "C++", "LISP"));
System.out.println(languages); // [c++, java, python]
我做错了什么?为什么会这样表现?
编辑:是一个有效的比较器:String::compareToIgnoreCase
(l, r) -> l.compareToIgnoreCase(r)