加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Rx java运算符;将数据流封装到自定义运算符中

发布时间:2020-12-15 04:21:39 所属栏目:Java 来源:网络整理
导读:让我们说我正以非常具体的方式观察一个观察者. resultObservable = anotherObservable.filter(~Filter code~).take(15); 我想创建一个自定义运算符,它结合了两个预定义的运算符,如filter和take.这样表现得像 resultObservable = anotherObservable.lift(new
让我们说我正以非常具体的方式观察一个观察者.

resultObservable = anotherObservable.filter(~Filter code~).take(15);

我想创建一个自定义运算符,它结合了两个预定义的运算符,如filter和take.这样表现得像

resultObservable = anotherObservable.lift(new FilterAndTake(15));

要么…

resultObservable = anotherObservable.FilterAndTake(15);

到目前为止,我很乐意编写一个可以执行此操作的特定操作符.我可以解除那个运算符.

但是,鉴于我目前对rx java的知识有限,这将涉及每次我需要在自定义运算符中使用它时重写take和filter功能.

这样做很好,但我宁愿重新使用由开源社区维护的预先存在的操作符,以及我创建的回收操作符.

还有一些东西告诉我,我对操作符和订户缺乏足够的了解.

有人可以推荐不是rx-java文档的教程吗?
我这样说是因为,虽然文档解释了一般概念,但它隔离了它们功能的概念和一般上下文,没有任何例子来激发RX java的更强大的应用程序.

所以特别是

我正在尝试将自定义数据流封装到代表性运算符中.这个功能是否存在?

解决方法

我不知道组成Operator对象的一些特殊功能(或糖).但您可以简单地创建一个新的运算符来组成现有的运算符.
这是FilterAndTake运算符的一个工作示例:

public class FilterAndTake<T> implements Observable.Operator<T,T> {

    private OperatorFilter<T> filter;
    private OperatorTake<T> take;

    public FilterAndTake(Func1<? super T,Boolean> predicate,int n) {
        this.filter = new OperatorFilter<T>(predicate);
        this.take = new OperatorTake<T>(n);
    }

    @Override
    public Subscriber<? super T> call(final Subscriber<? super T> child) {
        return filter.call(take.call(child));
    }
}

然后你可以按如下方式使用它:

public static void main(String[] args) {
    Observable<Integer> xs = Observable.range(1,8);

    Func1<Integer,Boolean> predicate = new Func1<Integer,Boolean>() {
        @Override
        public Boolean call(Integer x) {
            return x % 2 == 0;
        }
    };

    Action1<Integer> action = new Action1<Integer>() {
        @Override
        public void call(Integer x) {
            System.out.println("> " + x);
        }
    };

    xs.lift(new FilterAndTake<Integer>(predicate,2)).subscribe(action);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读