我正在做:
for (Object key : map.keySet())
if (something)
map.remove(key);
它抛出了一个ConcurrentModificationException,所以我把它改为:
for (Object key : new ArrayList<Object>(map.keySet()))
if (something)
map.remove(key);
这个过程以及修改映射的任何其他过程都在同步块中。
有没有更好的解决方案?
有没有更好的解决方案?
当然,在单个语句中有更好的方法,但这取决于基于删除哪些元素的条件。
例如:删除所有值为test的元素,然后使用下面的代码:
map.values().removeAll(Collections.singleton("test"));
更新
这可以在一行中使用Java 8中的Lambda表达式完成。
map.entrySet().removeIf(e-> <boolean expression> );
我知道这个问题太老了,但更新更好的做事方式并没有什么坏处:)
有没有更好的解决方案?
当然,在单个语句中有更好的方法,但这取决于基于删除哪些元素的条件。
例如:删除所有值为test的元素,然后使用下面的代码:
map.values().removeAll(Collections.singleton("test"));
更新
这可以在一行中使用Java 8中的Lambda表达式完成。
map.entrySet().removeIf(e-> <boolean expression> );
我知道这个问题太老了,但更新更好的做事方式并没有什么坏处:)