java - RxJava : How to extract object from observable?

标签 java rx-java

我觉得这是一个愚蠢的问题,但我暂时找不到任何答案,所以我要问一下,抱歉:)

因此,我需要一个执行以下操作的函数:

1) 调用另一个函数来创建一个 Observable User

2) 从 Observable User 获取 User 对象

3) 获取有关用户的一些信息并运行一些逻辑

4) 返回可观察用户

我在执行第 2 步时遇到问题。我怎么做?或者,这种方法在某种程度上是错误的吗?

这是函数的“模型”:

@Override protected Observable buildUseCaseObservable(){

    Observable<User> userObservable = userRepository.findUserByUsername(username);

    //User user = ??????

    //if (...) {...}

    return userObservable;
}

谢谢你:)

最佳答案

您可以使用运算符(map、flatMap、doOnNext 等)通过管道获取由您的可观察对象包装的对象

     Observable.just("hello world")
               .map(sentence-> sentence.toUpperCase) --> do whatever you need.
               .subscribe(sentence -> println(sentence)

通过设计 Observable 遵循 Observer 模式,订阅 Observable 并在通过管道发出后接收项目。

您还可以使用观察者模式,只需使用 toBlocking 从管道中提取对象。但那是一种反模式,意味着您没有应用好的设计。

          @Test
public void observableEvolveAndReturnToStringValue() {
    assertTrue(Observable.just(10)
                         .map(String::valueOf)
                         .toBlocking()
                         .single()
                         .equals("10"));
}

您可以在此处查看有关阻止的更多示例 https://github.com/politrons/reactive/blob/master/src/test/java/rx/observables/utils/ObservableToBlocking.java

关于java - RxJava : How to extract object from observable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38744522/

相关文章:

java - Java 8 中的谓词和函数接口(interface)有什么区别?

java - 不明白问题出在哪里(Java)

java - 如何对 Map<String, Object> 使用 Jackson 自定义值序列化器?

android - 在 MVP 中使用 Retrofit 测试 RxJava 调用得到通缉但未被调用

android - 订阅者的 onNext() 方法在哪个线程上运行?

rx-java - RxJava 链接 observables 和错误处理(自定义异常传播)

java - 私有(private)方法调用的垃圾回收

java - JSF 2 : Facelets composition (template) not rendered for error-page

android - 带有 View 列表的链式动画 RxJava2 Android

java - 发射后取消订阅间隔