Java 将多个单个<;列表<;类型>&燃气轮机';将s转换为单个<;列表<;类型>>;?

Java 将多个单个<;列表<;类型>&燃气轮机';将s转换为单个<;列表<;类型>>;?,java,multithreading,rx-java,reactive-programming,Java,Multithreading,Rx Java,Reactive Programming,我有一个函数loadApplesById,它接受一个AppleId,并返回一个Single 在另一个函数中,loadApplesByIdListI接受列表作为参数。对于其中的每个元素,我必须调用loadApplesById。loadApplesByIdList也将返回一个单条 大概是这样的: Single<List<Apple> loadApplesById(AppleId appleId) { // magic to create and load the apple

我有一个函数
loadApplesById
,它接受一个
AppleId
,并返回一个
Single

在另一个函数中,
loadApplesByIdList
I接受
列表作为参数。对于其中的每个元素,我必须调用
loadApplesById
loadApplesByIdList
也将返回一个
单条

大概是这样的:

Single<List<Apple> loadApplesById(AppleId appleId)
{
    // magic to create and load the apple list.
    return the Single.just(AppleList);
}


Single<List<Apple> loadApplesByIdList(List<AppleId> appleIdList)
{
    // My question how to create this function (?)
    // Approach (1)
    return Observable.from(appleIdList).flatMap(
        appleId -> this.loadApplesById(id)
        .toObservable())
        .reduce(new ArrayList<>(), (List<Apple> a, List<Apple> b)
            -> { a.addAll(b); return a; }).toSingle();

    // Approach (2)
    return Observable.from(appleIdList).flatMap(appleId -> loadApplesById(id)
            .toObservable())
            .toSingle();

}
Single{a.addAll(b);返回a;}).toSingle();
//方法(2)
返回可观察的.from(appleIdList).flatMap(appleId->loadApplesById(id)
.toObservable())
.toSingle();
}
虽然这两种方法都可以编译,但都不起作用


如果有人愿意花时间详细说明实现这一点的不同方法(使用折叠、缩小、平面贴图、concatMap)等,这将是一个很好的学习课程。

您必须展开每个单张,连接它们,然后再次收集它们:

Single allApples=
可观察的。来自可观察的(appleIdList)
.concatMap(appleId->
loadApplesById(appleId)
.flattasobservable(列表->列表)
)
.toList();

不过,您需要RxJava 2来实现这一点。

是的,但我需要在RxJava中实现:\
fromIterable
was
from
flatasobservable
可以通过
toObservable().concatmapterable(list->list)
实现。