groupedBy

그룹을 체이닝 가능한 (key, items) 레코드로 — 파이프라인을 떠나지 않고 그룹별 집계를 잇습니다.

List<({K key, List<A> items})> groupedBy<A, K>(K Function(A a) f, Iterable<A> iterable) Future<List<({K key, List<A> items})>> groupedByAsync<A, K>(FutureOr<K> Function(A a) f, FxAsyncIterable<A> iterable) Fx<({K key, List<T> items})> Fx<T>.groupedBy<K>(K Function(T a) f) // chain (sync) Future<List<({K key, List<T> items})>> FxAsync<T>.groupedBy<K>(FutureOr<K> Function(T a) f) // chain (async)

강의

groupBy는 터미널입니다. Map을 건네주는 순간 체인이 끝나고, "그룹별 합계를 내서 정렬하고 상위 3개"를 원하는 순간 kv.key / kv.value 격식을 갖춰 fx(map.entries)로 파이프라인에 재진입하게 됩니다. groupedBy는 같은 그룹핑을 체이닝 가능한 뷰로 제공합니다. 각 그룹은 이름 있는 레코드 (key: …, items: …)이므로 그룹별 집계, 정렬, take가 바로 그 체인에서 이어지고 — 하류 코드는 위치 기반 $1 / $2 대신 g.key / g.items로 읽힙니다.

그룹은 키를 처음 만난 순서로 나옵니다. groupBy의 맵이 순회되는 것과 똑같습니다. sortBy처럼 첫 그룹을 내놓기 전에 모든 값을 봐야 하므로 그룹핑 자체는 즉시 평가되고, 그 주변의 체인은 계속 합성 가능합니다.

Dart 고유의 추가 기능입니다(FxTS에는 대응물이 없습니다) — 키로 조회할 맵이 필요하면 groupBy를, 그룹이 더 긴 파이프라인의 중간 단계일 뿐이라면 groupedBy를 잡으세요.

데모 1 · 그룹 → 집계 → 순위, 체인 하나로

데모 2 · 비동기

직접 해 보기

연습: Map.entries를 건드리지 않고 지출 1위 카테고리를 찾아보세요.

관련 항목: groupBy — 같은 그룹핑을 키 있는 Map으로 · countBy — 유일한 집계가 개수일 때 · sortByDesc — 순위 매기기의 자연스러운 다음 단계