Java 8과 Java 11을 모두 사용 TreeSet
하여 String::compareToIgnoreCase
비교기를 사용 하여 다음 을 고려하십시오 .
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)