takeWhile
술어가 true를 반환하는 동안 값을 내보내다가, 거짓이 되면 그대로 끝냅니다.
Iterable<A> takeWhile<A>(bool Function(A a) f, Iterable<A> iterable)
FxAsyncIterable<A> takeWhileAsync<A>(FutureOr<bool> Function(A a) f, FxAsyncIterable<A> iterable)
Fx<T> Fx.takeWhile(bool Function(T value) test) // chain
FxAsync<T> FxAsync.takeWhile(FutureOr<bool> Function(T a) f)
강의
take가 개수를 센다면, takeWhile은 값을 검사합니다.
원소를 하나씩 내보내다가 즉시 멈춥니다 —
f가 false를 반환하는 바로 그 순간에 말이죠. 그 뒤에 조건에
맞는 원소가 있더라도 아예 쳐다보지 않습니다.
그래서 "데이터가 의미를 잃는 지점까지만 소비한다"는 상황에 잘 맞습니다.
정렬된 스트림을 임계값까지 읽는다든지, 로그를 첫 이상 징후까지 읽는
경우가 그렇습니다.
지연 평가되며 첫 실패에서 단락하기 때문에, 아주 크거나 무한한 소스 위에서도 부담이 없습니다. 실제로 조건에 맞는 앞부분만 계산합니다.
데모 1 · 기본
맨 뒤의 2는 기회조차 얻지 못합니다 — 술어가 이미
7에서 실패했기 때문입니다:
데모 2 · 비동기
직접 해 보기
연습: 온도가 25 미만으로 유지되는 동안만 값을 남겨 보세요.
관련 항목:
take — 술어가 아니라 개수로 가져옵니다 ·
takeUntilInclusive — 조건에 맞은 원소까지 포함하고 멈춥니다 ·
dropWhile — 정반대 동작 ·
filter — 앞부분만이 아니라 어디서든 맞는 값을 남깁니다