rx-java - 从 Observable 读取对象值

标签 rx-java

有没有办法可以在下面的代码中从 userObservable 返回用户列表。基本上如何读取 Observable 的对象值。

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
}

最佳答案

您需要订阅 userObservable .然后,您将获得数据可用时发出的用户列表。

userObservable
    .subscribe(users -> {
        for (User user : users) {
            // Do what you want with user.
        }
    });

编辑:要返回列表,您需要使用 toBlocking() 称呼。然后你可以使用 Blocking Observable Operators 之一以获得想要的效果。最有可能 first()single()会为你工作。

return userObservable
    .toBlocking()
    .first();

关于rx-java - 从 Observable 读取对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31329600/

相关文章:

java - 按照其元素的可用性顺序组合可观察对象

java - 如何访问 rx 中先前发射的数据?

android - Rxjava : multible Observables, 如果前一个失败则执行下一个 observable

android - rxJava 捕获 socketTimeoutException 错误

java - 在 RxJava 中倒带一个 Observable?

java - 后台点击事件的生命周期可观察

Spring Webflux Async PostgreSQL Publisher 在第一个结果后停止

android - 通过 observable 的 API 调用序列

android - RxScala/Java - 为什么我的 progressBar 没有显示?

android - 用 RXJava/RxAndroid : How does the Observable work? 改造