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

Rx java运营商;将数据流封装到自定义运算符中,java,reactive-programming,netflix,rx-java,Java,Reactive Programming,Netflix,Rx Java,假设我以一种非常具体的方式观察一个可观察的物体 resultObservable = anotherObservable.filter(~Filter code~).take(15); 我想创建一个自定义操作符,它结合了两个预定义的操作符,如filter和take。这样它的行为就像 resultObservable = anotherObservable.lift(new FilterAndTake(15)); 或者 resultObservable = an

假设我以一种非常具体的方式观察一个可观察的物体

    resultObservable = anotherObservable.filter(~Filter code~).take(15);  
我想创建一个自定义操作符,它结合了两个预定义的操作符,如filter和take。这样它的行为就像

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

    resultObservable = anotherObservable.FilterAndTake(15);  
到目前为止,我很乐意编写一个非常具体的操作符来实现这一点。我可以举起那个接线员

但是,鉴于我目前对RXJava的了解有限,这将涉及每次需要在自定义操作符中使用take和filter功能时都重新编写它

这样做很好,但我更愿意重用由开源社区维护的现有操作符,以及回收我创建的操作符

有些事情也告诉我,我对运营商和订户缺乏足够的了解

有人能推荐不是rx java文档的教程吗?
我这样说是因为,虽然文档解释了一般概念,但它隔离了概念及其功能的一般上下文,没有留下任何示例来激发更健壮的RXJava应用程序

如此重要


我试图将自定义数据流封装到具有代表性的运算符中。这个功能存在吗?

我不知道有什么特殊的功能(或糖)可以组成
操作符
对象。但您可以简单地创建一个新操作符来组合现有操作符。 下面是
filterandake
操作符的工作示例:

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类filterandake实现了Observable.Operator{
私人操作员过滤器;
私人经营者索取;

公共过滤器(Func1)在聚会上迟到了一点,但这就是为什么
compose
存在的原因:

Observable
.from(....)
.flatMap(... -> ....)
.compose(filterAndTake(15))
.subscribe(...)

public <T> Transformer<T,T> flterAndTake(int num) {
  return source -> source
     .filter(~Filter code~)
     .take(num);
}
可观察
.来自(……)
.flatMap(…->…)
.撰写(过滤器和制作(15))
.订阅(…)
公共变压器法兰盘(整数){
返回源->源
.filter(~filter code~)
.take(num);
}
Observable
.from(....)
.flatMap(... -> ....)
.compose(filterAndTake(15))
.subscribe(...)

public <T> Transformer<T,T> flterAndTake(int num) {
  return source -> source
     .filter(~Filter code~)
     .take(num);
}