본문 바로가기
개발/FRONT

java List 쪼개기

by 잠킴98 2023. 12. 30.
반응형

대용량 데이터를 처리할 때,

List 안에 데이터가 너무 많아 실행해야 하는 로직이 너무 오래 걸려 

성능 이슈의 발생 가능성이 있을 때는 List를 쪼개서 처리하도록 하자.

 

 

1. subList 사용법

public static void main(String[] args) {

    // 테스트 list 생성
    List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
    for (int i =0; i <23; i++) {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("id", "iddd" +i);
        map.put("i", i);
        list.add(map);
    }

    // list를 5개씩 subList로 잘랐다.
    for (int j = 0; j < list.size(); j+= 5) {
        int endIndex = Math.min(j+5, list.size());
        List<Map<String, Object>> mList = list.subList(j, endIndex);
        for (Map<String, Object> m : mList) {
            // 실제 처리하려는 로직
        }
    }

}

 

 

2. Streams를 사용하는 방법(java 8버전 이상부터 사용 가능)

public static void main(String[] args) {

	// 테스트 list 생성
    List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
    for (int i =0; i <23; i++) {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("id", "iddd" +i);
        map.put("i", i);
        list.add(map);
    }

	// 5개씩 잘랐다.
    List<List<Map<String, Object>>> batchList = IntStream.range(0,  (list.size()+5-1) / 5)
            .mapToObj(i -> list.subList(i * 5, Math.min((i+1) * 5, list.size())))
            .collect(Collectors.toList());

    for (List<Map<String, Object>> m : batchList) {  // batchList에 5개씩 들어있다.
        m.forEach(mm -> {
            // 처리 로직
        });
    }

}

 

반응형

'개발 > FRONT' 카테고리의 다른 글

Cookie and JavaScript  (1) 2024.01.03
Json Array에서 공백 배열 찾기  (0) 2024.01.03
아이폰(IOS)에서 new Date 포맷 오류  (0) 2023.12.31
NUXT에 대하여  (0) 2023.12.30
VUE에 대해서  (0) 2023.12.30