Rx java flatMap运算符导致编译错误

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

如下所示,我正在创建可观察对象。当我尝试应用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(函数的类型参数这里的问题是
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
via
p.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"))
                    );
}
}