仅从Observable返回发出的项目

时间:2016-01-06 08:48:42

标签: java-8 rx-java

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

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

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

我想用RxJava Observable做同样的事情。我试过了,但它返回Observable<String>而不是String

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

1 个答案:

答案 0 :(得分:4)

有一种方法可以获得同步的BlockingObservable<T>和反应式编程的推送模型。请参阅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);