【问题标题】:Find if there's at least one - Observable Java 8 Rx查找是否至少有一个 - Observable Java 8 Rx
【发布时间】:2016-11-25 09:56:48
【问题描述】:

我有一个Observable<SomeObject>,我需要测试它是否至少有一个值“事物”元素(我想不是流)尊重一个条件(它用于单元测试,所以我需要断言某事或至少抛出异常)。我应该如何用 Java 8 编写这个?

为了更好地解释:

Observable<SomeObject> thing = someFunction();
thing.flatMap(c -> c.toObservable())
.filter(q -> someContidion(q))
.forEach(x -> Assert.assertTrue(x!=null));

当然这不是我需要的,因为如果没有匹配条件的元素我看不到任何错误并且单元测试通过了。

【问题讨论】:

  • 不抱歉,我的问题不准确,我仍然找不到使用 anyMatch 的方法(也许它是正确的,但是如果我在 flatMap 之后尝试使用它,它会说无法解决方法)
  • Observable 来自 RxJava,你可以使用 exists() 方法,或者如果你想要像 Java 中的 stream.anyMatch(predicate) 这样的终端操作,你可以使用 exists().toBlockingObservable().single() 之类的东西
  • 谢谢@NickVanderhoven,这正是我所需要的,无论出于何种原因,问题已被改回以删除详细信息。
  • @t-rossi 有时,Stack Overflow 就是斯巴达

标签: java functional-programming java-8 rx-java


【解决方案1】:

另一种方法是使用 RxJava 项目已经用于它自己的测试用例的东西,即 TestSubscriberTestScheduler 在某些时候也可能对你有用):

@RunWith(JUnit4.class)
public class RxTest {

    @Test
    public void test() throws Exception {
        Observable<String> thing = Observable.just("thing", "stuff", "whatever", "", null);
        Observable<Boolean> test = thing.contains("thing");

        TestSubscriber<Boolean> sub = new TestSubscriber<>();
        test.subscribe(sub);

        sub.assertValue(true);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多