RxJava 2/RxAndroid 2オペレータdistinctはdistinctUntilChangedと重複した結果を返します.


RxJava 2/RxAndroid 2オペレータdistinctはdistinctUntilChangedと重複した結果を返します.
コード:
package zhangphil.app;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.observers.DisposableObserver;
import io.reactivex.schedulers.Schedulers;

public class MainActivity extends AppCompatActivity {
    private final String TAG = getClass().getSimpleName();

    private CompositeDisposable mCompositeDisposable = new CompositeDisposable();

    private Integer[] test_data = {
            1, 1, 2, 3, 4, 5, 2, 5, 3, 6, 4, 7, 7, 8, 9
    }; //            ,       

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        test();
    }

    private void test() {
        Observable<Integer> observable1 = Observable.fromArray(test_data);
        Observable<Integer> observable2 = Observable.fromArray(test_data);

        mCompositeDisposable.addAll(observable1
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .distinct()
                .subscribeWith(getObserver(0)),

                observable2
                        .subscribeOn(Schedulers.io())
                        .observeOn(AndroidSchedulers.mainThread())
                        .distinctUntilChanged()
                        .subscribeWith(getObserver(1)));
    }

    private DisposableObserver getObserver(final int id) {
        DisposableObserver disposableObserver = new DisposableObserver<Object>() {
            @Override
            public void onNext(Object o) {
                Log.d(id + TAG, "#####  #####");
                Log.d(id + "  ", String.valueOf(o));
                Log.d(id + TAG, "#####  #####");
            }

            @Override
            public void onComplete() {
                Log.d(id + TAG, "onComplete");
            }

            @Override
            public void onError(Throwable e) {
                Log.e(id + TAG, e.toString(), e);
            }
        };

        return disposableObserver;
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        //       ,       
        mCompositeDisposable.clear();
    }
}

実行結果出力:
05-18 10:57:55.069 4374-4374/zhangphil.app D/0MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/0  : 1
05-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/0  : 2
05-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/0  : 3
05-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/0  : 4
05-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/0  : 5
05-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/0  : 6
05-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/0  : 7
05-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/0  : 8
05-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/0  : 9
05-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/0MainActivity: onComplete
05-18 10:57:55.070 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/1  : 1
05-18 10:57:55.070 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/1  : 2
05-18 10:57:55.070 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.070 4374-4374/zhangphil.app D/1  : 3
05-18 10:57:55.070 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.071 4374-4374/zhangphil.app D/1  : 4
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.071 4374-4374/zhangphil.app D/1  : 5
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.071 4374-4374/zhangphil.app D/1  : 2
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.071 4374-4374/zhangphil.app D/1  : 5
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.071 4374-4374/zhangphil.app D/1  : 3
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.071 4374-4374/zhangphil.app D/1  : 6
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.071 4374-4374/zhangphil.app D/1  : 4
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.071 4374-4374/zhangphil.app D/1  : 7
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.071 4374-4374/zhangphil.app D/1  : 8
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.071 4374-4374/zhangphil.app D/1  : 9
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: #####  #####
05-18 10:57:55.071 4374-4374/zhangphil.app D/1MainActivity: onComplete