繁体   English   中英

过滤器可观察 <List<Object> &gt;与另一个可观察到的 <List<AnotherObject> &gt;

[英]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)eventDataList<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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM