Rx java 从可观察对象读取对象值

Rx java 从可观察对象读取对象值,rx-java,Rx Java,在下面的代码中,是否有一种方法可以从userObservable返回用户列表。基本上是如何读取可观察对象的对象值 public List<User> getUserList(){ Observable<Map<String, Object>> userDetailsObservable = getUserDetails(...); Observable<Map<String, Object>> userLikesObse

在下面的代码中,是否有一种方法可以从userObservable返回用户列表。基本上是如何读取可观察对象的对象值

public List<User> getUserList(){
    Observable<Map<String, Object>> userDetailsObservable = getUserDetails(...);
    Observable<Map<String, Object>> userLikesObservable = getUserLikes(...);
    Observable<List<User>> userObservable = Observable.zip(userDetailsObservable,
            userLikesObservable, new Func2<Map<String, Object>, Map<String, Object>, List<User>>() {
                public List<User> call(Map<String, Object> value1, Map<String, Object> value2) {
                    List<User> userList = new ArrayList<User>();
                    //Iterating both maps and composing user list here.
                    return userList;
                }
            });
    userObservable.subscribe(new Subscriber<List<User>>() {
        @Override
        public void onNext(List<User> userList) {
            System.out.println("Merged values " + userList);
        }

        @Override
        public void onError(Throwable error) {
            System.err.println("Error: " + error.getMessage());
        }

        @Override
        public void onCompleted() {
            System.out.println("Sequence complete.");
        }
    });
    // Throws ClassCastException which is expected... How do I get the user list from userObservable
    List<User> userList = List<User> userObservable;

    return userList; //Fetch the user list from userObservable and return
}
public List getUserList(){
可观察的UserDetailsObjectable=getUserDetails(…);
Observable userLikesObservable=getUserLikes(…);
Observable userObservable=Observable.zip(UserDetailsBServable,
userLikesObservable,新Func2(){
公共列表调用(映射值1、映射值2){
List userList=new ArrayList();
//在这里迭代映射和组合用户列表。
返回用户列表;
}
});
userObservable.subscribe(新订户(){
@凌驾
public void onNext(列表用户列表){
System.out.println(“合并值”+用户列表);
}
@凌驾
公共无效onError(可丢弃错误){
System.err.println(“错误:+Error.getMessage());
}
@凌驾
未完成的公共无效(){
System.out.println(“序列完成”);
}
});
//抛出预期的ClassCastException…如何从userObservable获取用户列表
List userList=List userObservable;
return userList;//从userObservable获取用户列表并返回
}

您需要订阅
userObservable
。然后,当数据可用时,您将获得一个用户列表。

userObservable
.订阅(用户->{
for(用户:用户){
//对用户执行您想要的操作。
}
});
编辑:要返回列表,您需要使用呼叫。然后,您可以使用其中一个来获得所需的效果。最有可能的是
first()
single()
适合您

returnuserobservable
.toBlocking()
.first();

在格式化您的文章时多放一秒钟plz@Sleiman我的帖子缺少什么格式?另外,我还没有把很多代码格式化。我在这里寻求帮助。只要可以理解就好。所以我非常感谢你对我问题的帮助。不,你的问题不清楚,这就是为什么你没有得到任何答案。你必须尊重那些花时间阅读的人。@SleimanJneidi谢谢你的反馈,我会确保我的格式更好。kjones,谢谢你的帮助。是否有一种方法可以从订阅返回用户列表。如果你想知道我为什么要这样做。我有一个场景,在这个场景中,我使用2个Observable进行2个异步RESTAPI调用,并使用userObservable合并响应。因此,在最后,我希望从我的方法返回用户列表。@PPK-我已经更新了答案,这将满足您的要求。请注意,阻止可观察对象是不可取的:
BlockingObservable是提供阻止运算符的各种可观察对象。它可以用于测试和演示目的,但通常不适用于生产应用程序(如果您认为需要使用BlockingObservable,这通常是您应该重新考虑设计的标志)。
因此,也许您必须重新考虑您正在做的事,在更高的层次上…@kjones,您是说您需要
订阅()
首先,然后执行
toBlocking()
?或者仅当您想要返回某些内容时才执行阻止?@Azurespot、
toBlocking()
subscribe()
是互斥的。用一个或另一个。小心使用toBlocking()如果你有一个无限的可观察对象,它可能会永远等待。