리스트를 순회하면서 내가 원하는 아이들만 collect 하는 중이었다.
한 myList라는 리스트에서 서로 전혀 겹치지 않는 두가지 집단 1,2 를 추출하는 과정이었다.
//1-1 temp save 용 ) 내가 작성자인 모든 프로젝트들 데려오기
List<Project> myProjectList = projectRepository.findByMember(member1);
//1-2 temp-save 가 true 인 것만 담는 리스트
List<Project> tempSavedProjectList = new ArrayList<>();
for (Project project : myProjectList) {
if (project.getTempsave()) {
tempSavedProjectList.add(project);
myProjectList.remove(project);
//임시저장 진행 중인 것
}
}
for(Project project: myProjectList){
System.out.println("임시저장 끝나고 남음");
System.out.println(project.getId());
}
//만약 이게 waiting approve 로 빠진다면 담아주는 리스트만 변경하면 된다.
for (Project project : myProjectList) {
if (!project.getTempsave()
// 임시저장 되지 않은 애들 중에 아직 approve 받지 않은 것들
&&
!(routeProductRepository.findAllByProject(project).get(
routeProductRepository.findAllByProject(project).size()-1
).isPassed())
// 아직 approved 되지 않았다면
) {
tempSavedProjectList.add(project);
myProjectList.remove(project);
}
}
결론적으로 말하자면 엘리먼트의 인덱스가 실시간으로 변하기 때문에 발생하는 이벤트 입니다.
Length가 변경되면서 해당 인덱스의 값이 null 이 되기 때문에 발생하는 것이죠.
이를 해결하기 위해서는 Iterator를 사용하여야 하며,
itr.next() 의 remove가 아니라 itr 자체에 remove 를 해주셔야 합니다.
출처: https://aljjabaegi.tistory.com/533 [알짜배기 프로그래머]