differenceBy

값 동등성 대신 계산된 키로 비교하는 difference입니다.

Iterable<A> differenceBy<A, B>(B Function(A a) f, Iterable<A> iterable1, Iterable<A> iterable2) FxAsyncIterable<A> differenceByAsync<A, B>(FutureOr<B> Function(A a) f, FxAsyncIterable<A> iterable1, FxAsyncIterable<A> iterable2) Fx<T> Fx<T>.differenceBy<B>(B Function(T a) f, Iterable<T> other) // chain: values of the chain not keyed in other

강의

differenceBy(f, iterable1, iterable2)difference와 완전히 동일한 인자 순서 규칙을 따릅니다. 결과는 iterable2에서 나오며, f로 만든 키가 결코 iterable1f-키에 나타나지 않는 원소만 남습니다(결과 안의 중복은 제거됩니다). f 함수는 양쪽 이터러블에 모두 적용되므로, 일부 언어의 differenceBy와 달리 두 인자는 같은 원소 타입 A를 공유해야 합니다. 비교되는 것은 파생된 키 타입 B뿐입니다.

"제외 목록"과 "원본 목록"이 단순한 값이 아니라 온전한 레코드일 때 꺼내 쓰게 되는 형태입니다. 차단된 사용자 객체 목록과 사용자 객체 목록을 id로 맞추거나, 품절 상품 목록과 상품 카탈로그를 sku로 맞추는 경우가 그렇습니다.

difference 자체가 사실 differenceBy((a) => a, iterable1, iterable2)입니다. 둘 다 체인 메서드가 없으니 data-first 함수를 직접 호출하세요. 비동기 쪽에서는 differenceAsync와 마찬가지로 동시성 표시가 iterable2에 적용됩니다.

데모 1 · 기본

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

직접 해 보기

연습: differenceBy'sku' 키 기준으로 써서 아직 구매 가능한 상품을 찾아보세요.

관련 항목: difference — 값 동등성으로 비교하는 버전 · intersectionBy — 반대로 공통 키를 가진 원소만 남기기 · uniqBy — 키 기준으로 이터러블 하나에서 중복 제거 · compress — 나란한 불리언 마스크로 필터링