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 — 병렬 평가