RxJava - приведение списка в общую коллекцию - PullRequest
0 голосов
/ 24 октября 2019

Как правильно создать общую коллекцию с использованием RxJava? Если я сделаю следующее, я получу несоответствие типов, потому что он возвращает одиночный,Я также пробовал flatMapSingle () и collect (), но я не уверен, как дать ему правильные типы.

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

1 Ответ

2 голосов
/ 25 октября 2019

К сожалению, 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);
}
...