谓词过滤器rxjava2-如何传递动态过滤器参数

谓词过滤器rxjava2-如何传递动态过滤器参数,java,reactive-programming,rx-java2,Java,Reactive Programming,Rx Java2,我已经用rxjava2构建了一些基本的过滤器,它可以正常工作。我想知道如何将值/参数传递给过滤器(返回td.getTypeId()==**;)。如果有人对如何使用rxjava2/filter构建(半)动态查询(对象==)有想法/线索/示例,我们将不胜感激 Predicate<TradeDetailed> testfilter; Flowable<List<TradeDetailed>> td = tr.getTradesDetailedFlowable();

我已经用rxjava2构建了一些基本的过滤器,它可以正常工作。我想知道如何将值/参数传递给过滤器
(返回td.getTypeId()==**;)
。如果有人对如何使用rxjava2/filter构建(半)动态查询(
对象==
)有想法/线索/示例,我们将不胜感激

Predicate<TradeDetailed> testfilter;

Flowable<List<TradeDetailed>> td = tr.getTradesDetailedFlowable();

testfilter = new Predicate<TradeDetailed>() {
    @Override
    public boolean test(@NonNull TradeDetailed td) throws Exception {
        return td.getTypeId() == 0;
    }
};

Disposable d = td
        .flatMapIterable(e -> e)
        .filter(e-> testfilter.test(e))
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(t -> {
                        System.out.println("filtered "+t.getReference()));

                    },
                    err -> {
                        System.out.println("error");
                    }
        );
谓词testfilter;
可流动的td=tr.getTradesDetailedFlowable();
testfilter=新谓词(){
@凌驾
公共布尔测试(@NonNull tradededetailed td)引发异常{
返回td.getTypeId()==0;
}
};
一次性d=td
.flatMapIterable(e->e)
.filter(e->testfilter.test(e))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅(t->{
System.out.println(“过滤的”+t.getReference());
},
呃->{
System.out.println(“错误”);
}
);

您可以为
谓词创建一个单独的类

class YourPredicate implements Predicate<TradeDetailed>(){

    private final int compareAgainst;

    public YourPredicate(int compareAgainst){
        this.compareAgainst = compareAgainst;
    }

    @Override
    public boolean test(@NonNull TradeDetailed td) throws Exception {
        return td.getTypeId() == compareAgainst;
    }

}
类YourPredicate实现谓词(){
私人最终国际比较;
公共谓词(int compareAinst){
this.compareAgainst=compareAgainst;
}
@凌驾
公共布尔测试(@NonNull tradededetailed td)引发异常{
返回td.getTypeId()==compareAginst;
}
}