RxJava科目是必要的吗?

use*_*539 4 java rx-java

我刚刚开始学习RxJava并思考反应性.我找到了一些文章(7个提示),说主题应该只作为最后的手段或第一个实现,我一直在想..截至目前我有一个PublishSubject

   PublishSubject.create()
    .scan(0, (a, b) -> a + 1).subscribe(replaySubject)
Run Code Online (Sandbox Code Playgroud)

它每次将值递增1,并由replaySubject订阅

ReplaySubject.create();

那就是打印价值.所以一开始我有0,然后在每一个PublishSubject.onNext我递增值,所以我得到1,2等因为它的replaySubject我得到了整个链.但是我一直在想是否可以在没有主题的情况下完成这项工作?我一直在阅读RxJava Wiki和运营商,但我无法弄清楚这可以做到的任何方式.

更新

所以我试图建立的伪代码以某种方式有一个以1开头的observable

Observable.just(1)
Run Code Online (Sandbox Code Playgroud)

现在我有点击监听器

OnClick{ }
Run Code Online (Sandbox Code Playgroud)

每次我点击一些按钮,我想看到所有以前的数字+ 1,所以1然后1,2,接下来1,2,3等我一直在尝试ConnectableObservator.replay但是这根本没有成功.在内部监听器中,我试图首先在我的Observable上添加扫描以增加值,然后订阅以便我可以打印它.但这也不起作用.该死的我觉得我处在一个黑角,误解了可观察的想法......

zsx*_*ing 5

由于您正在编写Android应用程序,因此可以使用RxAndroid.这是一个例子,

    Observable.just(1).flatMap(new Func1<Integer, Observable<Integer>>() {

        @Override
        public Observable<Integer> call(Integer initialValue) {
            return ViewObservable.clicks(button, false)
                    .subscribeOn(AndroidSchedulers.mainThread())
                    .scan(initialValue, new Func2<Integer, View, Integer>() {

                        @Override
                        public Integer call(Integer integer, View v) {
                            return integer + 1;
                        }
                    });
        }
    }).subscribe(new Observer<Integer>() {

        @Override
        public void onCompleted() {
        }

        @Override
        public void onError(Throwable e) {
            e.printStackTrace();
        }

        @Override
        public void onNext(Integer integer) {
            System.out.println(integer);
        }
    });
Run Code Online (Sandbox Code Playgroud)

我不确定这是不是你想要的.也许你只需要:

    ViewObservable.clicks(button, false)
            .subscribeOn(AndroidSchedulers.mainThread())
            .scan(1, new Func2<Integer, View, Integer>() {

                @Override
                public Integer call(Integer integer, View v) {
                    return integer + 1;
                }
            }).subscribe(new Observer<Integer>() {

        @Override
        public void onCompleted() {
        }

        @Override
        public void onError(Throwable e) {
            e.printStackTrace();
        }

        @Override
        public void onNext(Integer integer) {
            System.out.println(integer);
        }
    });
Run Code Online (Sandbox Code Playgroud)