Android 转换单个';s<;用户>;进入一个可流动的列表<;用户>;

Android 转换单个';s<;用户>;进入一个可流动的列表<;用户>;,android,rx-java,rx-java2,Android,Rx Java,Rx Java2,我有一个Rx流,用于将UserScoreTO列表分组为单个用户对象(多对一关系) public void execute(){ getUsers() .flatMap(列表->可流动.fromIterable(列表)) .groupBy(userScoreTO->userScoreTO.id) .flatMap(groups->Flowable.fromCallable(()->groups.collect)(用户::新建,(用户,用户分数)->{ user.id=userscore.id; u

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

public void execute(){
getUsers()
.flatMap(列表->可流动.fromIterable(列表))
.groupBy(userScoreTO->userScoreTO.id)
.flatMap(groups->Flowable.fromCallable(()->groups.collect)(用户::新建,(用户,用户分数)->{
user.id=userscore.id;
user.name=userscore.name;
user.totalScore+=userscore.score;
}))).subscribe(userSingle->userSingle.subscribe(新的SingleObserver)(){
@凌驾
认购的公共无效(一次性d){
System.out.println(“onSubscribe”);
}
@凌驾
成功时公共无效(用户){
System.out.println(用户);
}
@凌驾
公共无效申报人(可丢弃的e){
系统输出打印ln(e);
}
}));
}
如你所见,为了消费这个可流动的东西,我订阅了它,消费了它发出的一些
Single的
。所以我也订阅了那首单曲。虽然这甚至有效,但有点烦人。。。我只想订阅一次,并使用一组用户


几天前我问了另一个问题。该类的完整代码在那里

在末尾放置一个
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));
getUsers()
.flatMap(列表->可流动.fromIterable(列表))
.groupBy(userScoreTO->userScoreTO.id)
.flatMap(组->
可流动。从可调用(()->
收集(用户::新建,(用户,用户分数)->{
user.id=userscore.id;
user.name=userscore.name;
user.totalScore+=userscore.score;
}
)))
.flatMap(it->it.toFlowable())//System.out.println(user));

这正是我需要的!等待我需要一个用户列表。。。但是我做了.toList().subscribe(list->list.forEach(System.out::println)),就是这样……请注意,甚至还有一个
.flatMapSingle
,它可以做到这一点,而且速度更快。@TassosBassoukos哦,我不知道这个,谢谢!然后,在使用
flatMapSingle
的情况下,它将被写入
.flatMapSingle(it->it)
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));