map
각 원소를 함수에 통과시켜 만든 값들의 지연 이터러블을 반환합니다.
Iterable<B> map<A, B>(B Function(A a) f, Iterable<A> iterable)
FxAsyncIterable<B> mapAsync<A, B>(FutureOr<B> Function(A a) f, FxAsyncIterable<A> iterable)
Fx<R> Fx.map<R>(R Function(T a) f) // chain
FxAsync<R> FxAsync.map<R>(FutureOr<R> Function(T a) f)
강의
map은 가장 기본이 되는 변환 연산자입니다. 모든 원소에
함수를 적용하죠. FxDart에서는 지연 평가됩니다 —
map을 호출하는 것만으로는 아무 일도 일어나지 않습니다.
종결 연산자(toList, each,
reduce …)가 파이프라인에서 값을 끌어당길 때 비로소 함수가
실행됩니다. 덕분에 필요한 만큼만 끌어당긴다면 엄청나게 큰 —
심지어 무한한 — 시퀀스에도 map을 걸 수 있습니다.
data-first 형태(map(f, iterable))와 체인
메서드(fx(iterable).map(f)) 두 가지로 쓸 수 있습니다. 둘 다
동일한 지연 결과를 반환합니다.
데모 1 · 기본과 지연 평가
100만 개 중에서 take(3)이 끌어당기는 3개에 대해서만
매핑 함수가 실행되는 것을 확인해 보세요:
데모 2 · 비동기, 그리고 동시성
mapAsync(또는 .toAsync().map(...))는 비동기
함수를 받습니다. 그대로 두면 원소를 하나씩 순서대로 await 하지만,
concurrent(n)을 붙이면 상류가 한 번에 n개씩
평가합니다 — 결과는 여전히 순서대로 도착합니다:
직접 해 보기
연습: map으로 이 Map 리스트를
"KIM (32)" 같은 형식의 이름 문자열 리스트로 바꿔 보세요.
관련 항목:
mapEffect — map과 같지만 부수 효과임을 드러냅니다 ·
flatMap — map + 평탄화 ·
peek — 변환하지 않고 들여다보기 ·
concurrent — 병렬 평가