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文档的教程吗? 所以特别是 我正在尝试将自定义数据流封装到代表性运算符中.这个功能是否存在? 解决方法
我不知道组成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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |