회사에 들어가 개발자가 된지 3개월차가 되었다.
나는 Stream에 대해 관심이 많으며 그래도 Stream을 써야할 때는 못쓰더라도
쓰지 않아야할 곳에서는 안쓰고 있다고 자부하고 있었다.
하지만...
이번 기회에 그 자부심이 깨져버렸다.
여러 반복문
엑셀 다운로드기능을 구현중에 각 데이터를 Mapping 해야하는 상황이였습니다.
문제점
//헤더, 로우 정보 셋팅
LinkedHashMap<String, List<Object>> dataMaps = new LinkedHashMap<>();
dataMaps.put("번호", numberList);
dataMaps.put("회원그룹", responseList.stream().map(accountGiftCardDto -> (Object) accountGiftCardDto.getUserGroupName()).toList());
dataMaps.put("아이디", responseList.stream().map(accountGiftCardDto -> (Object) accountGiftCardDto.getSignName()).toList());
dataMaps.put("이름", responseList.stream().map(accountGiftCardDto -> (Object) accountGiftCardDto.getName()).toList());
dataMaps.put("상품권 발급일시", responseList.stream().map(accountGiftCardDto -> (Object) accountGiftCardDto.getSaveAt()).toList());
dataMaps.put("상품권 사용일시", responseList.stream().map(accountGiftCardDto -> (Object) accountGiftCardDto.getUseAt()).toList());
dataMaps.put("사용여부", responseList.stream().map(accountGiftCardDto -> accountGiftCardDto.getUseAt() == null ? (Object) "미사용" : "사용완료").toList());
createDto.setDataMaps(dataMaps);
// 엑셀 다운로드
...생략
보면 아시겠지만 각 Map.put()에 반복문이 돌고 있기 때문에 성능저하가 일어난다. 같은 객체의 List 이기 때문에
한번으 반복문으로 로직을 구현할 수 있음에도 불구하고 이렇게 짠 내 자신에게 화난다.
해결방안
//헤더, 로우 정보 셋팅
HashMap<String, List<Object>> dataMaps = new LinkedHashMap<>();
dataMaps.put("회원그룹", Lists.newArrayList());
dataMaps.put("아이디", Lists.newArrayList());
dataMaps.put("이름", Lists.newArrayList());
dataMaps.put("상품권명", Lists.newArrayList());
dataMaps.put("상품권 발급일시", Lists.newArrayList());
dataMaps.put("상품권 사용일시", Lists.newArrayList());
dataMaps.put("사용여부", Lists.newArrayList());
for (AccountGiftCardDto.Response accountGiftCardDto : responseList) {
String saveAt = accountGiftCardDto.getSaveAt() == null ? null : accountGiftCardDto.getSaveAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
String useAt = accountGiftCardDto.getUseAt() == null ? null : accountGiftCardDto.getUseAt().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
dataMaps.get("회원그룹").add(accountGiftCardDto.getUserGroupName());
dataMaps.get("아이디").add(accountGiftCardDto.getSignNameList());
dataMaps.get("이름").add(accountGiftCardDto.getUserName());
dataMaps.get("상품권명").add(accountGiftCardDto.getGiftCardName());
dataMaps.get("상품권 발급일시").add(saveAt);
dataMaps.get("상품권 사용일시").add(useAt);
dataMaps.get("사용여부").add(accountGiftCardDto.getUseAt() != null ? "사용완료" : "미사용");
}
'몰아 넣기' 카테고리의 다른 글
[자바] 박싱과 언박싱에 대해서 (0) | 2023.02.05 |
---|---|
[Spring] @Async를 사용해 비동기 메소드 만들어보기 (0) | 2023.01.08 |
[Spring]@Valid, @Validated 에 대해서 정리[3] - DTO구조를 이용한 @Valid (0) | 2022.11.27 |
[자바/자료구조] Array(배열)과 LinkedList(연결 리스트) 그리고 ArrayList에 대한 정리[2] - ArrayList 사용법과 예제 (0) | 2022.09.04 |
[자바/자료구조] Array(배열)과 LinkedList(연결 리스트) 그리고 ArrayList에 대한 정리[1] - 개념 및 배열 사용법 및 예제 (2) | 2022.09.03 |