如何使用RxJava2和RxAndroid获取带条件的映射?

如何使用RxJava2和RxAndroid获取带条件的映射?,java,android,rx-java,rx-java2,rx-android,Java,Android,Rx Java,Rx Java2,Rx Android,所以,我已经按照对象的条件列表进行了排序 private Observable<CallServiceCode> getUnansweredQuestionList() { return Observable.fromIterable(getServiceCodeArrayList()) .subscribeOn(Schedulers.computation()) .filter(iServiceCode ->

所以,我已经按照对象的条件列表进行了排序

private Observable<CallServiceCode> getUnansweredQuestionList() {
    return Observable.fromIterable(getServiceCodeArrayList())
               .subscribeOn(Schedulers.computation())
               .filter(iServiceCode -> iServiceCode.getServiceCodeFormStatus().isUnanswered());
}
但是RxJava2中没有这样的方法
isNotEmpty()
,而且这样添加密钥也是不对的:

private Map<CallServiceCode, ArrayList<CallServicePart>> getSortedMap() {
      Map<CallServiceCode, ArrayList<CallServicePart>> result = new HashMap<>();

      getUnansweredQuestionList()
          .filter(callServiceCode -> Observable.fromIterable(callServiceCode.getCallServicePartList()) //
          .filter(servicePart -> servicePart.getServicePartFormStatus().isUnanswered())//
          .isNotEmpty())
          .subscribe(callServiceCode -> result.put(callServiceCode, Observable.fromIterable(callServiceCode.getCallServicePartList()) //
                                                                                                .filter(servicePart -> servicePart.getServicePartFormStatus().isUnanswered()));
      return result;
}
Observable.fromIterable(callServiceCode.getCallServicePartList())
    .filter(servicePart -> servicePart.getServicePartFormStatus().isUnanswered())

所以问题是如何正确地制作它?

一种解决方案可以是使用
收集
直接从可观察对象创建
地图

return getUnansweredQuestionList()
        .collect(HashMap<CallServiceCode, List<CallServicePart>>::new,(hashMap, callServiceCode) -> {
            List<CallServicePart> callServiceParts = Observable.fromIterable(callServiceCode.getServicePartList())
                        .filter(s -> !s.getServicePartFormStatus().isUnanswered())
                        .toList().blockingGet();
            if (!callServiceParts.isEmpty())
                hashMap.put(callServiceCode, callServiceParts);
        }).blockingGet();
return getUnansweredQuestionList()
           .collect(HashMap<CallServiceCode, List<CallServicePart>>::new, (hashMap, callServiceCode) -> {
               List<CallServicePart> filteredParts = getFilteredServiceParts(callServiceCode.getServicePartList());
               if (!filteredParts .isEmpty())
                   hashMap.put(callServiceCode, filteredParts);
            }).blockingGet();