দক্ষভাবে একাধিক চাবি মানচিত্র থেকে সরান?


124

আমার কাছে Map<String,String>বিশাল সংখ্যক কী মানগুলির জোড়া রয়েছে। এখন আমি এটি থেকে নির্বাচিত কীগুলি সরাতে চাই Map। নিম্নলিখিত কোডটি দেখায় যে আমি এটি অর্জনে কী করেছি।

Set keySet = new HashSet(); //I added keys to keySet which I want to remove. 

তারপরে:

Iterator entriesIterator = keySet.iterator();
while (entriesIterator.hasNext()) {
   map.remove( entriesIterator.next().toString());
} 

এটি কাজ করছে। আমি কেবল জানতে চাই, আমার প্রয়োজনীয়তা অর্জনের জন্য এর চেয়ে ভাল উপায় কী হতে পারে?

উত্তর:


241

স্ট্রিং সরাতে চান আপনার সেট ধরে নেওয়া যাক রয়েছে, আপনি ব্যবহার করতে পারেন পদ্ধতি এবং ।keySetmap.keySet().removeAll(keySet);

keySetএই মানচিত্রে থাকা কীগুলির একটি সেট দৃশ্য প্রদান করে। সেটটি মানচিত্রে সমর্থনযুক্ত, তাই মানচিত্রে পরিবর্তনগুলি সেটে প্রতিফলিত হয় এবং বিপরীতে।

অনুমোদিত উদাহরণ:

Map<String, String> map = new HashMap<>();
map.put("a", "");
map.put("b", "");
map.put("c", "");

Set<String> set = new HashSet<> ();
set.add("a");
set.add("b");

map.keySet().removeAll(set);

System.out.println(map); //only contains "c"

আপনার পরামর্শ দুর্দান্ত। আমার ধারণা, সরানোর সমস্ত (কীসেট) আমি সেখানে যা করেছি তা করছে
রুচিরা গায়ান রানাভিরা

11
"দক্ষতা" এর নিরিখে এটি সম্ভবত নীচের
দিকের

3

কেবল সম্পূর্ণতার জন্য:

যেমন অনুমান করা হয়েছে java.util.AbstractSet#removeAllসত্যই সমস্ত প্রবেশের উপরে পুনরাবৃত্তি হয় তবে একটি সামান্য কৌশল দ্বারা: এটি ছোট সংগ্রহের পুনরাবৃত্তি ব্যবহার করে:

if (size() <= collection.size()) {
    Iterator<?> it = iterator();
    while (it.hasNext()) {
        if (collection.contains(it.next())) {
            it.remove();
        }
    }
} else {
    Iterator<?> it = collection.iterator();
    while (it.hasNext()) {
        remove(it.next());
    }
}

1

জাভা স্ট্রিম ব্যবহার:

keySet.forEach(map::remove);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.