![article thumbnail image](https://blog.kakaocdn.net/dn/xJamI/btrX3qnoUOO/rkdyg8Yrueg0MZvO1mLUYK/img.png)
회고
각 로우에 stream을 사용해 총 6개의 반복문이 일어난다. 하지만 이 로직은 하나의 리스트객체를 사용하므로 하나의 반복문으로도 이 로직을 수행할 수 있었다.
//헤더, 로우 정보 셋팅
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);
// 엑셀 다운로드
...생략
해결방안
그나마 나는 stream을 유용하게 사용할 줄 안다고 생각했지만 전혀 아니였다. 나는 항상 코드의 양을 줄이려고 하는게 문제가 되는 것 같다. for문을 사용하면 최대 2줄정도 늘어나니 stream을 사용했는데, 생각해보니 가독성도 안좋고 속도저하가 일어날 것이다.
//헤더, 로우 정보 셋팅
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 ? "사용완료" : "미사용");
}