【问题标题】:Return only emitted items from an Observable仅返回 Observable 发出的项目
【发布时间】:2016-01-06 18:20:59
【问题描述】:

我想从 Observable 流中获取发射的项目。

我可以使用以下代码在 Collection 流中执行此操作:

List<String> items = Arrays.asList("a", "b");
String result = items.stream().filter(i -> i.equals("a")).findFirst().orElse("");

我想用 RxJava Observable 做同样的事情。我试过这个,但它返回一个Observable&lt;String&gt; 而不是String

Observable<String> result2 = Observable.from(items).filter(i -> i.equals("a")).firstOrDefault("");

【问题讨论】:

    标签: java-8 rx-java


    【解决方案1】:

    有一种方法可以获得BlockingObservable&lt;T&gt;,它是同步的,并且与响应式编程的推送模型相反。请参阅 javadoc (Link to Blocking Operations) 中的注释:

    BlockingObservable 是提供阻塞操作符的各种 Observable。它可以用于测试和演示目的,但通常不适合生产应用程序(如果您认为需要使用 BlockingObservable,这通常表明您应该重新考虑您的设计)。

    所以你的问题的解决方案如下:

    List<String> items = Arrays.asList("a", "b");
    String result = Observable.from(items).filter(i -> i.equals("a"))
                              .toBlocking().firstOrDefault("");
    System.out.println(result);
    

    【讨论】:

    • 有趣。所以,如果我们需要直接访问发射的项目,那么我们必须离开异步模型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 2021-08-25
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多