Rx java flatMap运算符导致编译错误
如下所示,我正在创建可观察对象。当我尝试应用faltMap运算符时,收到的编译错误显示:Rx java flatMap运算符导致编译错误,rx-java,observable,rx-java2,flatmap,Rx Java,Observable,Rx Java2,Flatmap,如下所示,我正在创建可观察对象。当我尝试应用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 Objec
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(函数的类型参数这里的问题是p.get(0)。getName()
应该返回一个可观察的参数。
行.map(p->p)
也没用。当你使用flatmap时,你有Observable,在下一个流中,你将有Type1。看起来你可以在这里使用map而不是flatmap。而且在该映射之后,你有字符串,所以在map函数下面的行中,你必须使用字符串对象,而不是Person对象
你能解释一下你到底想要什么,这样我就可以修改你的代码了吗
P.S.P. S:请考虑第一类到第二类的映射将在第二类中发射第二级,但可观察到的类将发射第三类。因此,如果你已经观察到了,你需要平面地图,否则使用MAP/P。你的问题我不清楚。你说你知道区别,但是你不能说出为什么你自己选择<代码>平面图< /代码> > <代码> MAP在那一行?@akarnokd你能帮我知道为什么我的代码中没有使用flatmap吗?这将帮助我更好地理解差异你能理解String
不是observedsource
?flatmap
要求你返回observedsource
,但你返回String
viap.get(0).getName()
。在那里使用map
!谢谢..我只想举个例子看看flatmap和map之间的区别以及我应该在什么时候使用它们。到目前为止我所了解的..flatmap:采用流“可观测,可选”和返回流。当Map获取流和返回相同类型流的数据时,在所有类型的Map中,您也可以更改类型。如果需要,您可以在上游有人,在下游有字符串。上游和下游之间的区别是什么?请指该行上方的流和数据流b下面这句话:
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"))
);
}
}