![](/img/trans.png)
[英]TornadoFX/JavaFX - filter an observable list based on another observable property
[英]Filter Observable<List<Object>> with another Observable<List<AnotherObject>>
有什么方法可以实现关注吗?
我有两个Observable,
Observable<List<String>> broadcastIdsObservable
。 Observable<List<EventData>> eventDatasObservable
。 有什么方法可以用broadcastIdsObsevable中的List过滤eventDatasObservable? 我需要获取具有满足条件eventData.getBroadcastId().equals(broadCastId)
的eventData
的List<EventData>
,其中broadCastId
是广播broadCastId
的每一项。
我尝试了不同的方式来使用flatMap,map和Observable.concat ...,但我无法实现。
提前致谢。
您可以使用RxJavaJoins 。 您需要包括
compile 'io.reactivex:rxjava-joins:0.22.0'
然后创建Join:
@NonNull
@SuppressWarnings("unchecked")
private Func0<Observable<List<EventData>>> loadAndFilterEvents() {
return new Func0<Observable<List<EventData>>>() {
@Override
public Observable call() {
Observable<List<String>> broadcastIdsObservable = ...;
Observable<List<EventData>> eventDatasObservable = ...;
Plan0<List<EventData>> plan = JoinObservable.from(broadcastIdsObservable)
.and(eventDatasObservable)
.then(filterJoin);
return JoinObservable.when(plan).toObservable();
}
private Func2<List<String>, List<EventData>, List<EventData>> filterJoin = (broadcastIds, events) -> {
List<EventData> filtered = new ArrayList<>();
for (EventData event : events) {
if (broadcastIds.contains(event.getBroadcastId())) {
filtered.add(event);
}
}
return filtered;
};
};
}
并订阅:
Observable.defer(loadAndFilterEvents())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(filteredEvents -> Timber.d("Events: %s", filteredEvents),
Timber::e);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.