জাভা 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)