회고

각 로우에 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 ? "사용완료" : "미사용");
    }

 

복사했습니다!