组合许多Single<列表<类型>>'s转换为单个<列表<类型>>



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

在另一个函数中,loadApplesByIdList我接受List<AppleId>作为参数。对于其中的每个元素,我都必须调用loadApplesByIdloadApplesByIdList也将返回一个Single<List<Apple>>

类似这样的东西:

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();
}

虽然这两种方法都可以编译,但都不起作用。

如果有人花时间详细说明实现这一目标的不同方法(使用fold、reduce、flatMap、concatMap(等,这将是一堂很好的学习课。

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

Single<List<Apple>> allApples = 
Observable.fromIterable(appleIdList)
.concatMap(appleId -> 
loadApplesById(appleId)
.flattenAsObservable(list -> list)
)
.toList();

不过,您需要RxJava 2。

相关内容

  • 没有找到相关文章

最新更新