it-swarm.dev

إزالة مفاتيح متعددة من الخريطة بطريقة فعالة؟

لدي 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());
} 

هذا يعمل. أريد فقط أن أعرف ، ما هي الطريقة الأفضل لتحقيق مطلبي؟

101
Ruchira Gayan Ranaweera

على افتراض أن مجموعتك تحتوي على السلاسل التي تريد إزالتها ، يمكنك استخدام طريقة keySet و map.keySet().removeAll(keySet);.

keySet يُرجع طريقة عرض Set للمفاتيح الموجودة في هذه الخريطة. المجموعة مدعومة بالخريطة ، لذلك تنعكس التغييرات على الخريطة ، والعكس بالعكس.

مثال مفتعل:

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"
206
assylias

فقط من أجل الاكتمال:

كما هو ظاهر ، 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());
    }
}
3
Sebastian