java - RxJava 科目是必要的吗?

标签 java rx-java

我刚刚开始学习 RxJava 和响应式(Reactive)思维。 我发现一些文章(7 个提示)说主题只能用作最后的手段或第一个实现,我一直在想.. 截至目前,我有一个 PublishSubject

   PublishSubject.create()
    .scan(0, (a, b) -> a + 1).subscribe(replaySubject)

每次加1,被replaySubject订阅

ReplaySubject.create();

这只是打印值。所以一开始我有 0,然后在每个 PublishSubject.onNext 上我递增值,所以我得到 1、2 等。因为它的 replaySubject 我得到了整个链。 但是我一直在想这是否可以在没有主题的情况下完成?我一直在阅读 RxJava Wiki 和运算符,但我想不出任何方法可以做到这一点。

更新

所以我试图实现的伪代码是以某种方式拥有一个以 1 开头的可观察对象

Observable.just(1)

现在我有了点击监听器

OnClick{ }

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

最佳答案

由于您正在编写 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);
        }
    });

我不确定这是否是您想要的。也许你只需要:

    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);
        }
    });

关于java - RxJava 科目是必要的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26330232/

相关文章:

java - 在 react 器中对两个不同的 Mono 进行组合订阅

java - 如何在 if block 内重构 Single/Observable 的公共(public)映射

java - 使用 Java 管理 API 调用 [Android]

java - 通过 Web 服务仅发送文件夹中 1mb 的文件

java - 将 php 正则表达式转换为 java

android - 合并两个 Observable 流时如何发出最终值?

java - 当在 AndroidSchedulers.mainThread() 上观察到 Observable 时,Android JUnit 测试无限期阻塞

android - 获取 RxJava Observable 的当前值

java - 如何将前一个元素添加到新数组列表的当前索引

java - 使用 UNION 组合相同的 SQL 表并搜索特定单词返回重复行