Forech在遍历List集合的时候是不可以做add/remove操作的。
List list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
for (String s : list) {
list.remove(s);
}
报错:
Exception in thread "main" java.util.ConcurrentModificationException
删除集合的方式:
1、普通写法:
// 容器删除
Iterator it = list.iterator();
while(it.hasNext()){
String next = it.next();
if("a".equals(next)){
it.remove();
}
}
2、lambda
// removeIf 方法 1.8提供
list.removeIf(new Predicate() {
@Override
public boolean test(String s) {
return "a".equals(s);
}
});
// 简化
list.removeIf((str) -> str.equals("a"));
3、通用写法(类似 removeIf方法 源码):
// 调用删除集合的操作 将行为
delete(list, (e) -> { return e.equals("a");});
/**
* 自定义 删除集合的通用操作
* @param lists
* @param predicate
* @param
*/
private static void delete(List lists, Predicate predicate){
Iterator iterator = lists.iterator();
while(iterator.hasNext()){
if(predicate.test(iterator.next())){
iterator.remove();
}
}
}