谓词过滤器 rxjava2 - 如何传递动态过滤器参数
predicate filter rxjava2 - How to pass dynamic filter arguments
我用 rxjava2 构建了一些基本过滤器,它按预期工作。我想知道如何将 values/pass 个参数传递给过滤器 (return td.getTypeId() == **<value>**;)
。此外,如果有人 ideas/clues/examples 关于如何使用 rxjava2 / 过滤器构建(半)动态查询(Object.<field> == <value>
),我们将不胜感激。
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");
}
);
您可以为 Predicate
创建单独的 class:
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;
}
}
我用 rxjava2 构建了一些基本过滤器,它按预期工作。我想知道如何将 values/pass 个参数传递给过滤器 (return td.getTypeId() == **<value>**;)
。此外,如果有人 ideas/clues/examples 关于如何使用 rxjava2 / 过滤器构建(半)动态查询(Object.<field> == <value>
),我们将不胜感激。
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");
}
);
您可以为 Predicate
创建单独的 class:
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;
}
}