【发布时间】:2019-04-06 22:26:52
【问题描述】:
如下所示,我正在创建 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 运算符时收到编译错误。
代码:
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"))
);
}
}
【问题讨论】:
-
您的问题我不清楚。您是否说您知道其中的区别,但您无法说出为什么您自己在那条线上选择了
flatMap而不是map? -
@akarnokd 请您帮助我了解为什么我的代码中没有使用 flatmap。这将帮助我更好地理解差异
-
你明白
String不是ObservableSource吗?flatMap要求您返回ObservableSource,但您通过p.get(0).getName()返回String。在那里使用map!
标签: rx-java observable rx-java2 flatmap