concat

첫 번째 이터러블을 모두 내보낸 뒤, 이어서 두 번째 이터러블을 지연 평가로 내보냅니다.

Iterable<A> concat<A>(Iterable<A> iterable1, Iterable<A> iterable2) FxAsyncIterable<A> concatAsync<A>(FxAsyncIterable<A> iterable1, FxAsyncIterable<A> iterable2) Fx<T> Fx.concat(Iterable<T> other) // chain FxAsync<T> FxAsync.concat(FxAsyncIterable<T> other)

강의

concat은 두 이터러블을 새 리스트로 복사하지 않고 앞뒤로 이어 붙입니다. 양쪽 모두 완전히 지연 평가되므로, 파이프라인이 첫 번째 소스의 끝을 실제로 지나가지 않는 한 두 번째 이터러블은 전혀 건드리지 않습니다. 따라서 비용이 큰 소스나 무한 소스를 첫 번째로 두고 뒤에 다른 소스를 붙여도, 첫 번째 소스가 가진 것보다 많이 요구하지 않는 한 안전합니다.

concatAsynctakeconcat의 다른 async 형제들처럼 그대로 통과시키는 연산자입니다. 내부에서 어느 쪽도 직렬화하지 않기 때문에, 하류의 concurrent(n)은 현재 활성화된 쪽에 대해 여전히 pull을 겹쳐서 수행할 수 있습니다.

데모 1 · 기본과 지연 평가

두 번째 이터러블은 부수 효과가 있는 제너레이터입니다. take(2)가 첫 번째 리스트만으로 충족되기 때문에 아예 실행되지 않는 것을 확인해 보세요.

데모 2 · 비동기

직접 해 보기

연습: morningevening을 이어 붙여 하나의 일정으로 만들어 보세요.

관련 항목: append — 뒤에 값 하나만 추가 · prepend — 앞에 값 하나만 추가 · zip — 이어 붙이는 대신 원소끼리 짝지어 묶기