map, flatMap은 역할이 상당히 유사하다. 어떤 컬렉션을 다른 형태로 변형시켜주는 함수이다.
flatMap으로 하는 일을 map으로도 할 수 있다. 조금 복잡해 질 뿐!
단일 스트림 안의 요소를 원하는 특정 형태로 변환
스트림의 형태가 배열과 같을 때, 모든 원소를 단일 원소 스트림으로 반환할 수 있다.
map을 한 후 .flatten()을 호출 한 것과 결과가 같다.
Iterable의 각 요소의 단위를 지켜야 하는 경우 Map, 그 요소의 단위를 해체하고 싶은 경우 FlatMap을 쓰면 될 것 같다!
예를 들어, 아래 그림에서,,
map을 적용한 이후에는 [Hello] -> [H,e,l,l,o] 이렇게 단위를 유지하면서 내부 transform을 진행했다면,
flatMap을 적용한 이후에는 저 단위가 없어지고(flat해지고) H,e,l,l,o... 요소 각각에 대해 접근하고 있다.
val financeList = listOf(bankList, cardList)
val manufacturerList = financeList.flatMap {
it
}.map {
it.name
}
은행거래리스트와 카드거래리스트를 합쳐 flat 한 리스트를 만들고 그 중 이름만 뽑음.