TIL

[TIL] stream을 사용하여 코드 간결하게 하기....

봄봄로그 2023. 8. 15. 22:13

반환 값을 리스트로 뽑고 싶었다.

에러가 여러개일 땐 리스트에 담아서 그 리스트를 반환시키고 에러가 한개일 땐 그 한개만 반환하는 것... 그것이 내가 원하는 것이었다.

stream을 쓰면 간단하게 표현할 수 있지만 머리가 복잡할 땐 일단 혼돈의 코드를 먼저 짜본다!

ErrorResponse errorResponse = ErrorResponse.builder()
                 .httpStatus(HttpStatus.BAD_REQUEST)
                 .detail(errorMessage.toString())
                 .build();

         if(errorMessage.size() > 1 ) {
             List<ErrorResponse> list = new ArrayList<>();
             for (Object o : errorMessage) {
                 errorResponse = ErrorResponse.builder()
                         .httpStatus(HttpStatus.BAD_REQUEST)
                         .detail(String.valueOf(o))
                         .build();
                 list.add(errorResponse);
             }
             return ResponseEntity.status(errorResponse.getHttpStatus()).body(CommonResponse.fail(list));
         }

return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(CommonResponse.fail(errorResponses));

음음

길고 지저분하다.

이것을 stream을 사용하여 간결하게 줄일 수 있다.

 

List<ErrorResponse> errorResponses = errorMessage.stream().map(v -> ErrorResponse.builder()
                 .httpStatus(HttpStatus.BAD_REQUEST)
                 .detail(v)
                 .build()).toList();
                 
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(CommonResponse.fail(errorResponses));

👏👏👏👏