Как показано ниже, я создаю Observables. Когда я пытаюсь применить оператор faltMap, я получаю сообщение об ошибке компиляции:
Cannot infer type argument(s) for <R> flatMap(Function<? super T,? extends ObservableSource<? extends R>>)
Type mismatch: cannot convert from String to ObservableSource<? extends Object>
Я знаю разницу между картой и flatMap? Я хотел бы знать, почему, когда я использовал оператор flatMap, я получил ошибки компиляции.
код
public static void main(String[] args) {
Observable<List<Person>> observables = Observable.create(e-> {
for(List<Person> p : Main.getPersons()) {
e.onNext(p);
}
e.onComplete();
});
observables
//.subscribeOn(Schedulers.newThread())//newThread
.flatMap(p->p.get(0).getName())
.map(p->p)
.doOnNext(p-> System.out.println("p.." + p))
//.delay(5, TimeUnit.SECONDS)
//.interval(0, 5, TimeUnit.SECONDS)
.observeOn(Schedulers.io())
.subscribe(new Observer() {
@Override
public void onComplete() {
// TODO Auto-generated method stub
System.out.println("onCompleted");
}
@Override
public void onError(Throwable arg0) {
// TODO Auto-generated method stub
}
@Override
public void onNext(Object arg0) {
// TODO Auto-generated method stub
System.out.println("onNextFromObserver: " + arg0);
}
@Override
public void onSubscribe(Disposable arg0) {
// TODO Auto-generated method stub
}
});
}
private static List<List<Person>> getPersons() {
return Arrays.asList(
Arrays.asList(new Person("Sanna", 59, "EGY")),
Arrays.asList(new Person("Mohamed", 69, "EGY")),
Arrays.asList(new Person("Ahmed", 44, "QTR")),
Arrays.asList(new Person("Fatma", 29, "KSA")),
Arrays.asList(new Person("Lobna", 24, "EGY"))
);
}
}