code: @NonNull
      Completable overwriteUsingDiffUtil(@NonNull final List<? extends T> newContents,
                                           @NonNull final EqualityFunction<? super T> identityEqualityFunction,
                                           @NonNull final EqualityFunction<? super T> contentEqualityFunction) {
          return copyContents().switchMap(new Function<List<? extends T>, Observable<?>>() {
              @Override
              public Observable<Object> apply(List<? extends T> existingContentsCopy) throws Exception {
                  return calculateDiff(existingContentsCopy, newContents, identityEqualityFunction, contentEqualityFunction)
                          .switchMap(new Function<DiffUtil.DiffResult, Observable<Object>>() {
                              @Override
                              public Observable<Object> apply(DiffUtil.DiffResult diffResult) throws Exception {
                                  return applyNewContentsAndDispatchDiffNotifications(newContents, diffResult).toObservable();
                              }
                          });
              }
          }).ignoreElements();
      }
docs: TODO: Fix race condition between async diff util overwrites and the others.