for(Map<String,Object> client : webClientList) {
if(client.getOrDefault("session_id", "").equals(sessionId)) {
webClientList.remove(client);
}
}
session id가 동일한 경우 webClientList에서 값을 제거하는 코드인데 ,
webClientList를 순회하면서 동시에 해당 요소를 제거하려고 하기 때문에 예외가 발생했다.
해당 예외를 피하기 위해서는 순회 중인 컬렉션에서 직접 요소를 제거하는 대신,
Iterator의 remove() 메서드를 사용하여 제거해야 한다고 한다.
Iterator<Map<String, Object>> iterator = webClientList.iterator();
while (iterator.hasNext()) {
Map<String, Object> client = iterator.next();
if (client.getOrDefault("session_id", "").equals(sessionId)) {
iterator.remove();
}
}
Iterator 객체를 사용하여 webClientList를 순회하고, iterator.remove()를 호출하여 요소를 안전하게 제거한다.
🚨 주의사항 🚨
Iterator의 remove() 메서드는 반드시 next() 메서드를 호출한 후에만 호출해야 한다.
그렇지 않으면 IllegalStateException 예외가 발생할 수
참고 사이트
https://aljjabaegi.tistory.com/533
https://hbase.tistory.com/322