RxJava - 将列表转换为通用集合

RxJava - Casting a List to a generic Collection

使用 RxJava 创建通用集合的正确方法是什么?如果我执行以下操作,我会得到类型不匹配,因为它 returns 一个 Single>。我也试过 flatMapSingle() 和 collect(),但我不确定如何给它正确的类型。

public Single<Collection<MyObj>> someMethod() {
  Observable<Collection<MyObj>> someObservable = getData();
  return someObservable 
         .flatMapIterable(item -> item)
         .filter(someFilter)
         .toList();
}

不幸的是,Java 不像其他语言那样具有协变和逆变,因此 Observable<List<T>> 无法分配给 Observable<Collection<T>>。您必须手动向上转换值类型:

public Single<Collection<MyObj>> someMethod() {
    Observable<Collection<MyObj>> someObservable = getData();
    return someObservable 
           .flatMapIterable(item -> item)
           .filter(someFilter)
           .toList()
           .map(list -> (Collection<MyObj>)list);
}