intersection
difference의 반대입니다. 두 번째 이터러블의 원소 중 첫 번째에도 들어 있는 것만 남깁니다.
Iterable<A> intersection<A>(Iterable<A> iterable1, Iterable<A> iterable2)
FxAsyncIterable<A> intersectionAsync<A>(FxAsyncIterable<A> iterable1, FxAsyncIterable<A> iterable2)
Fx<T> Fx<T>.intersection(Iterable<T> other) // chain: values of the chain also in other
강의
intersection(iterable1, iterable2)은
difference와 같은 인자 순서 규칙을 따릅니다. 결과는
iterable2를 훑으면서
iterable1에 들어 있는 원소를
(iterable2의 순서대로, 중복은 제거해서) 남깁니다.
iterable1은 오직 포함 여부를 확인하는 집합으로만
쓰입니다. 두 인자를 바꿔도 집합론적으로는 같은 값이 나오지만,
내보내는 원소의 출처가 바뀌므로 실제 순서(그리고 어느 컬렉션의 중복이
합쳐지는지)는 달라집니다. 데모 1을 보세요.
내부적으로는
intersectionBy((a) => a, iterable1, iterable2)입니다.
값 동등성이 아니라 계산된 키로 온전한 레코드 두 목록을 맞춰야 한다면
intersectionBy를
바로 쓰세요.
체인 메서드는 없으니 data-first 함수를 호출하세요. 비동기 쪽에서는
.concurrent(n)의 동시성 표시가
iterable2에 적용됩니다. iterable1은 포함
여부 집합을 만들기 위해 미리 전부 소비합니다.
데모 1 · 기본과 인자 순서
데모 2 · 비동기, 그리고 동시성
직접 해 보기
연습: intersection으로 지원자의 기술 중 실제로
요구되는 것이 무엇인지 찾아보세요.
관련 항목:
difference — 제외하는 쪽의 짝 ·
intersectionBy — 대신 계산된 키로 맞추기 ·
uniq — 이터러블 하나에서 중복 제거 ·
includes — 값 하나의 포함 여부 확인