본문 바로가기
JAVA

체크카드 매일 사용이벤트 가상구현

by 오렌지코딩 2023. 5. 7.
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 리스트를 추가로 생성하여 해결