difference

첫 번째 이터러블에 없는 두 번째 이터러블의 원소를 반환합니다 — 인자 순서가 중요합니다.

Iterable<A> difference<A>(Iterable<A> iterable1, Iterable<A> iterable2) FxAsyncIterable<A> differenceAsync<A>(FxAsyncIterable<A> iterable1, FxAsyncIterable<A> iterable2) Fx<T> Fx<T>.difference(Iterable<T> other) // chain: values of the chain not in other

강의

시그니처를 주의 깊게 보세요. difference(iterable1, iterable2)iterable2를 순회하면서 오직 iterable1에 없는 원소만 내보냅니다 (uniq처럼 중복은 제거됩니다). iterable1은 오직 포함 여부를 검사하는 집합으로만 쓰입니다 — 그 자신의 원소는 결과에 절대 나타나지 않으며, 내부의 중복도 아무 영향이 없습니다. 이 순서는 대칭이 아닙니다. 인자를 바꾸면 완전히 다른(그리고 대개 길이도 다른) 결과가 나옵니다. 기억하기 좋은 방법은 iterable1을 "제외 목록", iterable2를 "걸러 낼 목록"으로 생각하는 것입니다.

내부 구현은 differenceBy((a) => a, iterable1, iterable2)입니다 — 값 동등성 대신 계산된 키로 비교해야 한다면 differenceBy를 참고하세요.

difference에는 체인 메서드가 없습니다. data-first 함수(그리고 그 비동기 짝)로만 존재합니다. 비동기 쪽에서는 .concurrent(n)이 붙인 동시성 표시가 iterable2에 적용됩니다 — iterable1의 제외 집합은 결과가 흘러나오기 전에 항상 먼저 전부 소진됩니다.

데모 1 · 기본과 인자 순서

데모 2 · 비동기, 그리고 동시성

직접 해 보기

연습: differenceallTasks 중 아직 completed에 없는 작업을 찾아보세요.

관련 항목: differenceBy — 계산된 키로 비교하는 같은 동작 · intersection — 반대로 공통 원소만 남기기 · uniq — 이터러블 하나에서 중복 제거 · includes — 이터러블 하나에 포함되는지 검사