chunk

각각 최대 size개의 연속된 원소를 담은 리스트들의 지연 이터러블을 반환합니다.

Iterable<List<A>> chunk<A>(int size, Iterable<A> iterable) FxAsyncIterable<List<A>> chunkAsync<A>(int size, FxAsyncIterable<A> iterable) Fx<List<T>> Fx.chunk(int size) // chain FxAsync<List<T>> FxAsync.chunk(int size)

강의

chunk는 평평한 시퀀스를 고정 크기 그룹으로 묶습니다 — 카드를 패로 나누거나, 결과 집합을 페이지로 자르거나, 하위 API에 n개씩 묶어 작업을 보내는 식입니다. 리스트를 하나 내보내기 전에 딱 size개만 버퍼링하므로, 아주 큰 소스에서도 지연 평가와 제한된 메모리 사용을 유지합니다. 소스가 딱 나누어떨어지지 않는 경우, 개수가 모자랄 수 있는 것은 마지막 청크뿐입니다.

비동기 버전인 chunkAsync는 청크 하나를 만들기 전에 size개를 await합니다 — 상류에 .concurrent(n)을 함께 쓰면 청크 하나 분량의 비동기 작업을 동시에 처리할 수 있습니다.

데모 1 · 기본

10개를 3씩 묶으면 마지막 청크가 짧게 남습니다.

데모 2 · 비동기

직접 해 보기

연습: 카드를 3장씩 패로 나눠 보세요.

관련 항목: slice — 반복 배치 대신 임의의 구간 하나 · split — 고정 크기 대신 구분자 기준으로 묶기 · transpose — 이미 청크로 나뉜 데이터의 행과 열 뒤집기