groupsBy

열리는 대로의 살아 있는 그룹: 키, 그리고 그 키를 공유하는 이후 값의 내부 스트림.

class GroupedEvents<K, T> { final K key; final FxEvents<T> events; } FxEvents<GroupedEvents<K, T>> FxEvents<T>.groupsBy<K>(K Function(T value) keyOf, {Stream<void> Function(K key)? lastFor}) // chain (events)

강의

풀 레이어의 groupBy는 터미널입니다: 전부를 당기고 Map을 건넵니다. groupsBy는 살아 있는 버전입니다. 각 키의 첫 값이 GroupedEvents를 내보냅니다 — 그 key와 내부 events 스트림의 레코드 — 그리고 같은 키의 이후 값은 그 내부로 전달됩니다. 그룹은 소스가 닫힌 뒤가 아니라, 열리는 대로 처음 본 키 순서로 나타납니다.

그것은 중첩된 FxEvents 아이디어로 window*와 같고, 시간이 아니라 값으로 키를 답니다. 위젯은 그룹이 나타나는 순간 그 내부에 구독해 이후 값이 도착하는 대로 볼 수 있고, 묶음을 기다릴 필요가 없습니다.

lastFor가 있으면, lastFor(key)의 첫 이벤트(또는 완료)가 그 그룹을 완료합니다. 같은 키의 이후 값은 새 그룹을 엽니다 — 사용자마다의 유휴 타임아웃, 방마다의 "세션 종료" 신호. lastFor가 없으면 그룹은 소스가 완료될 때까지 (또는 에러가 날 때까지 — 살아 있는 그룹마다 에러를 낸 뒤 바깥에) 열려 있습니다.

바깥을 취소하면 살아 있는 그룹은 조용히 완료됩니다. window 가족이 따르는 것과 같은 RxJS 9 규칙입니다. fxdart 이벤트 레이어, Rx의 groupBy를 따랐습니다.

데모 1 · 열리는 대로의 그룹

데모 2 · lastFor로 그룹 닫기

직접 해 보기

연습: SKU를 부서 접두사로 묶기.

관련 항목: groupBy — 풀 레이어에서 키 달린 Map으로의 같은 묶기 · groupedBy — 풀 레이어 그룹을 체인 가능한 (key, items) 레코드로 · window* — 개수, 트리거, 시계로 회전하는 살아 있는 내부