map과 flatMap이 만드는 element shape

Course 두 개의 tag List를 변환했을 때 결과 수준이 달라진다.

map(Course::tags)

각 Course가 List 하나가 되어 List<List<String>>을 만든다

2 elements

flatMap(tags.stream)

하위 tag를 같은 Stream으로 합쳐 String 흐름을 만든다

4 elements
관계 보존원래 Course가 필요하면 track-tag pair record로 변환한다

핵심: 중첩 구조가 domain 요구라면 map 결과를 억지로 평탄화하지 않는다.