जावा 8 और जावा 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)