Map遍历删除元素的几种方法(转载)
https://blog.csdn.net/kangbin825/article/details/134090875
方法一:笨方法,遍历,找出key再删除
遍历map, 找出需要删除的key放在集合中, 然后再删除, 代码如下:
public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("a", 1); map.put("b", 2); map.put("c", 3); map.put("d", 4); List<String> toRemoveKeys = new ArrayList<>(); for (Map.Entry<String, Integer> e : map.entrySet()) { if (e.getValue() % 2 == 0) { toRemoveKeys.add(e.getKey()); } } toRemoveKeys.forEach(map::remove); }
方法二:entrySet
虽然Map没有迭代,但是它的entrySet有啊,所以我们可以通过它来实现遍历删除。这个可能是我们经常使用的方法:
public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("a", 1); map.put("b", 2); map.put("c", 3); map.put("d", 4); Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator(); Map.Entry<String, Integer> entry; while (iterator.hasNext()) { entry = iterator.next(); if (entry.getValue() % 2 == 0){ iterator.remove(); } } System.out.println(map); }
方法三:jdk8 removeIf方法
到jdk8之后,针对容器提供了很多简洁的操作方式,迭代删除这方面可以说更加简单了,仅需一行代码:
public static void main(String[] args) { Map<String, Integer> map = new HashMap<>(); map.put("a", 1); map.put("b", 2); map.put("c", 3); map.put("d", 4); map.entrySet().removeIf(entry -> entry.getValue() % 2 == 0); }
总结 :
- 和list删除元素一样,不要在for或foreach迭代过程中删除数据,如有需要,可以使用迭代器entrySet.Iterator或者jdk8 的removeIf流式写法。