During removing object from List or Set are facing java.util.ConcurrentModificationException following exception here is solution for it. I like to solve it using Java 8 streaming.
Table of Contents
Bad Code:
List<String> names = new ArrayList<>(Arrays.asList("join","Morry","John","Jok","Sand"));
for(String name:names){
if(name.startsWith("J")){
names.remove(name);
}
}
Exception in thread "main" java.util.ConcurrentModificationException at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:937) at java.base/java.util.ArrayList$Itr.next(ArrayList.java:891) at module.maven.demo/com.javadeveloperzone.CollectionRemoveElement.example2(CollectionRemoveElement.java:24) at module.maven.demo/com.javadeveloperzone.CollectionRemoveElement.main(CollectionRemoveElement.java:17)
Solution 1: Remove using removeIf method. (Only for Java 8)
List<String> names = new ArrayList<>(Arrays.asList("join", "Morry", "John", "Jok", "Sand"));
System.out.println("Print All names");
names.forEach(System.out::println);
names.removeIf((name) -> {
return name.startsWith("J");
});
System.out.println("Print after Remove names start with j");
names.forEach((name) -> System.out.println(name));Output:
Print All names join Morry John Jok Sand Print after Remove names start with j join Morry Sand
Solution 2: Remove using iterator
List<String> names = new ArrayList<>(Arrays.asList("join", "Morry", "John", "Jok", "Sand"));
System.out.println("Print All names");
names.forEach(System.out::println);
Iterator<String> stringIterator = names.iterator();
while (stringIterator.hasNext()) {
String name = stringIterator.next();
if (name.startsWith("J")) {
stringIterator.remove();
}
}
System.out.println("Print after Remove names start with j");
names.forEach((name) -> System.out.println(name));Output:
Print All names join Morry John Jok Sand Print after Remove names start with j join Morry Sand
Was this post helpful?
Let us know if you liked the post. That’s the only way we can improve.
