package com.thread;
import java.util.*;
public class MapTest {
public static void main(String[] args) {
List<Map<String, Object>> lists = new ArrayList<Map<String,Object>>();
List<Map<String, Object>> removed = new ArrayList<Map<String,Object>>();
HashMap<String, Object> map1 = new HashMap();
map1.put("DE_FLOW_NO", "HGF1234");
map1.put("ORG_DE_FLOW_NO", null);
map1.put("APR_DATE", "20230213");
HashMap<String, Object> map2 = new HashMap();
map2.put("DE_FLOW_NO", "HGF5678");
map2.put("ORG_DE_FLOW_NO", null);
map2.put("APR_DATE", "20230213");
// map2 승인건 취소
HashMap<String, Object> map3 = new HashMap();
map3.put("DE_FLOW_NO", "HGF56781234");
map3.put("ORG_DE_FLOW_NO", "HGF5678");
//map3.put("APR_DATE", "20230214");
// map5 승인건 취소
HashMap<String, Object> map4 = new HashMap();
map4.put("DE_FLOW_NO", "HGFabcdefg");
map4.put("ORG_DE_FLOW_NO", "HGF1011");
//map4.put("APR_DATE", "20230214");
HashMap<String, Object> map5 = new HashMap();
map5.put("DE_FLOW_NO", "HGF1011");
map5.put("ORG_DE_FLOW_NO", null);
map5.put("APR_DATE", "20230214");
HashMap<String, Object> map6 = new HashMap();
map6.put("DE_FLOW_NO", "HGF0201");
map6.put("ORG_DE_FLOW_NO", null);
map6.put("APR_DATE", "20230201");
lists.add(map1);
lists.add(map2);
lists.add(map3);
lists.add(map4);
lists.add(map5);
lists.add(map6);
// 위의 코드는 DB로부터 가져온 테이블 가상으로 구현, 실제 소스코드는 아래코드부터 구현시작
for(Map<String, Object> list: lists) {
if(list.get("ORG_DE_FLOW_NO") != null) { // ORG_DE_FLOW_NO컬럼 값이 존재하는 행, 즉 취소 건 튜플을 뽑아낸다.
String target = (String) list.get("ORG_DE_FLOW_NO"); // 취소건의 'ORG_DE_FLOW_NO'컬럼 값 추출
for(Map<String, Object> list_sub: lists) {
if(list_sub.get("DE_FLOW_NO") == target) { // 승인 건의 DE_FLOW_NO컬럼값과 취소건의 'ORG_DE_FLOW_NO'컬럼 값이 같은 경우 해당 승인 건 튜플 삭제
removed.add(list_sub);
}
}
}
}
lists.removeAll(removed);
for(Map<String, Object> list: lists) {
System.out.println(list.get("DE_FLOW_NO"));
}
}
}
https://codechacha.com/ko/java-concurrentmodificationexception/
Java - ConcurrentModificationException 원인 및 해결 방법
ConcurrentModificationException는 보통 리스트나 Map 등, Iterable 객체를 순회하면서 요소를 삭제하거나 변경을 할 때 발생합니다. removeIf, removeAll, Iterable 등의 메소드를 이용하여 리스트 순회 중 요소를
codechacha.com
lists의 담겨있는 튜플을 삭제하는 과정에서 ConcurrenModificationException 에러가 발생하였다. 이를 해결하기 위해 위의 url을 참조하였다. removed 리스트를 추가로 생성하여 해결
'JAVA' 카테고리의 다른 글
파일 일기 10초마다 실행 배치 (0) | 2024.12.17 |
---|---|
자바 bigDecimal 사용방법 (0) | 2023.08.15 |
[Java] Map보다 DTO 클래스를 사용해야 하는 이유 (FROM 망나니개발자) (0) | 2023.03.02 |
JAVA BigDecimal > int 형변환 (0) | 2023.02.11 |