gpt4 book ai didi

android - 将 Single's 的 Flowable 转换为 List 的 Flowable

转载 作者:行者123 更新时间:2023-11-29 19:05:29 25 4
gpt4 key购买 nike

我有一个用于将 UserScoreTO 列表分组到单个用户对象(多对一关系)的 Rx 流。

public void execute() {
getUsers()
.flatMap(list -> Flowable.fromIterable(list))
.groupBy(userScoreTO -> userScoreTO.id)
.flatMap(groups -> Flowable.fromCallable(() -> groups.collect(User::new, (user, userscore) -> {
user.id = userscore.id;
user.name = userscore.name;
user.totalScore += userscore.score;
}))).subscribe(userSingle -> userSingle.subscribe(new SingleObserver<User>() {
@Override
public void onSubscribe(Disposable d) {
System.out.println("onSubscribe");
}

@Override
public void onSuccess(User user) {
System.out.println(user);
}

@Override
public void onError(Throwable e) {
System.out.println(e);

}
}));

}

如您所见,为了消费这个可流动的对象,我订阅了它,消费了它发出的一些 Single's。所以我也订阅了那首单曲。虽然这甚至可以工作,但有点烦人......我只想订阅一个并使用一组用户......

前几天又问了一个问题about this same code .该类的完整代码在那里。

最佳答案

在末尾放置一个 flatMap 可以消除对嵌套 subscribe 的需要。

例子:

getUsers()
.flatMap(list -> Flowable.fromIterable(list))
.groupBy(userScoreTO -> userScoreTO.id)
.flatMap(groups ->
Flowable.fromCallable(() ->
groups.collect(User::new, (user, userscore) -> {
user.id = userscore.id;
user.name = userscore.name;
user.totalScore += userscore.score;
}
)))
.flatMap(it -> it.toFlowable()) // <-- unwrap the singles
.subscribe(user -> System.out.println(user));

关于android - 将 Single's<User> 的 Flowable 转换为 List<User> 的 Flowable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47401166/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com