map 안에서는 여러 줄 로직을 쓸 수 있다.
단, 마지막에 반드시 "하나를 반환" 해야 한다.
map (변환)
.map(d -> {
return new DrResponse(...);
})
forEach (소비)
.forEach(d -> {
System.out.println(d.getName());
})
| 구분 | map | forEach |
|---|---|---|
| 목적 | 변환 | 실행 |
| return | 필수 | 없음 |
| 결과 | 새로운 Stream | 없음 |
조건 로직도 가능하다고 한다.
.map(d -> {
if (d.getName().isBlank()) {
return new DrResponse(d.getId(), "이름없음");
}
return new DrResponse(d.getId(), d.getName());
})
-> 조건 분기 OK
map에 적당한 것
- DTO 변환
- 단순 포맷 가공
- 표시용 값 처리
map에 부적절한 것
- DB 조회
- 권한 판단
- 핵심 비즈니스 규칙
====> 이런 것들은 Service에서 처리.
"
.map(this::toResponse)
"
"
private DrResponse toResponse(Dr d) {
return new DrResponse(d.getId(), d.getName());
}
"
map은 여러 줄 로직을 가질 수 있지만,
"변환"이라는 역할은 절대 벗어나면 안 된다.