Java 转换单个<;列表<;项目>&燃气轮机;对可观察到的<;项目>;? 目标

Java 转换单个<;列表<;项目>&燃气轮机;对可观察到的<;项目>;? 目标,java,rx-java,reactive-programming,Java,Rx Java,Reactive Programming,我从一个网络请求呼叫中获得一个单次。最后,我想将这些项目用作可观察的或单个。我从Item到Item2,使用newitem2(Item Item) 我认为会奏效的 单个项目 .map(Observable::fromIterable)//单个到可观察 .map(新函数(){ //我真的不知道我怎么能在这里做到 }) .subscribeOn(//…/) .观察(//…/); 我想我可以用map转换可观察对象的类型,所以我不太明白为什么第二个map的参数是可观察对象而不是项。 我如何才能正确地实现

我从一个网络请求呼叫中获得一个
单次
。最后,我想将这些项目用作
可观察的
单个
。我从
Item
Item2
,使用
newitem2(Item Item)

我认为会奏效的
单个项目
.map(Observable::fromIterable)//单个到可观察
.map(新函数(){
//我真的不知道我怎么能在这里做到
})
.subscribeOn(//…/)
.观察(//…/);
我想我可以用
map
转换
可观察对象的类型,所以我不太明白为什么第二个
map
的参数是
可观察对象而不是项。

我如何才能正确地实现这一点?

如果我理解正确,您希望将
单个
转换为
Item2
对象流,并能够按顺序使用它们。在这种情况下,您需要使用
.toObservable()

例如:

Single<List<Item>> items = Single.just(new ArrayList<>());
items.toObservable()
            .flatMap(new Func1<List<Item>, Observable<Item>>() {
                @Override
                public Observable<Item> call(List<Item> items) {
                    return Observable.from(items);
                }
            })
            .map(new Func1<Item, Item2>() {
                @Override
                public Item2 call(Item item) {
                    return new Item2(item);
                }
            })
            .subscribeOn(//.../)
            .observeOn(//.../);

总结:如果要更改可观察的
的类型,请使用
.flatMap()

有一些方法:

items.flatmappobservable(Observable::fromIterable).map(Item2::new).toList()
//或
items.toObservable.flatMap(Observable::fromIterable).map(Item2::new.toList())
//或
items.toObservable().flatMapIterable(Functions.identity()).map(Item2::new.toList())

第一个是最简单的。

我想你需要使用平面地图。@AluanHaddad就是这样,谢谢。谢谢!当我应该使用
flatMap
时,我正在使用
map
。是否有一种方法可以将
项目的类型更改为
项目2
,并保持一个
输出?因此,我将有一个
单张
作为输入,并将输出一张
单张
。是的,您可以在
.map()
之后使用
.toSingle()
(或者只要
.toList()
,如果您不关心具体的单张),而不是
toobservable().flatMap()
,您可以使用
flatMapObservable()
酷!我不知道
Single<List<Item>> items = Single.just(new ArrayList<>());
items.toObservable()
            .flatMap(new Func1<List<Item>, Observable<Item>>() {
                @Override
                public Observable<Item> call(List<Item> items) {
                    return Observable.from(items);
                }
            })
            .map(new Func1<Item, Item2>() {
                @Override
                public Item2 call(Item item) {
                    return new Item2(item);
                }
            })
            .subscribeOn(//.../)
            .observeOn(//.../);
items.toObservable()
            .flatMap(Observable::from)
            .map(Item2::new)
            .subscribeOn(//.../)
            .observeOn(//.../)
            .subscribe();