본문 바로가기

Dev/Spring Boot

Java - Stream 으로 코드 최적화

728x90
       List<Walk> walkList = activityRepository.findByUsername(username);
       List<GetWalkDto> res = new ArrayList<>();

       for(Walk w : walkList){
           res.add(new GetWalkDto(w.getDistance(), w.getAvg_heart_rate()));
       }

       return res;

 

Walk 리스트를 가져와서 Dto에 맞게 리턴해주는 함수이다. 그러나 이것은 너무 길고 비효율적이다. stream 을 사용해 최적화할 수 있다.

 

List<Walk> walkList = activityRepository.findByUsername(username);

        return walkList.stream()
                .map(w -> new GetWalkDto(w.getDistance(), w.getAvg_heart_rate()))
                .collect(Collectors.toList());
}

 

결국 모든 Walk를 새로운 타입으로 지정하는 것이다. 그러므로 

 

1. walk 리스트를 스트림으로 만든다.

2. 매핑함수 map을 통해 파라미터 w를 새로운 dto로 만들고 마지막에 컬렉션으로 수집한다.

 

마치 자바스크립트의 고차함수와 비슷한 개념이다. 알아두면 간결하고 효율적인 코드를 작성할 수 있으니 알아두자.