Exception 可观察验证每个项目

Exception 可观察验证每个项目,exception,rx-java,rx-java2,Exception,Rx Java,Rx Java2,如何验证可观察的中的每个项目,并在条件失败时返回错误? 现在我正在使用switchMap和if,但是这个解决方案看起来不是很好: Observable.just(1, 2, 3, -1, 4) .switchMap(x -> { if (x >= 0) { return Observable.just(x); } else { return Observable.error(new Excepti

如何验证可观察的
中的每个项目,并在条件失败时返回错误?
现在我正在使用
switchMap
if
,但是这个解决方案看起来不是很好:

Observable.just(1, 2, 3, -1, 4)
    .switchMap(x -> {
        if (x >= 0) {
            return Observable.just(x);
        } else {
            return Observable.error(new Exception("Input value should be positive"));
        }
    })
    .subscribe(
        x -> System.out.printf("value=%d\n", x),
        err -> System.out.printf("error: %s\n", err.getMessage())
    );
我可以使用任何内置方法来代替此方法吗?

您可以使用它来引发异常

Observable.just(1, 2, 3, -1, 4)
        .doOnNext(x -> {
            if (x < 0) throw Exception("Input value should be positive");
        })
        .subscribe(
            x -> System.out.printf("value=%d\n", x),
            err -> System.out.printf("error: %s\n", err.message)
        );
可观察。仅(1,2,3,-1,4)
.doOnNext(x->{
如果(x<0)抛出异常(“输入值应为正”);
})
.订阅(
x->System.out.printf(“值=%d\n”,x),
err->System.out.printf(“错误:%s\n”,错误消息)
);

这不是一个过滤器吗?@PhoenixWang
filter
只是删除“坏”值,而我需要一个例外1。您可以在过滤器中抛出一个异常,操作员将传递错误。2.我认为对于反应流来说,这不是一个好的实现。异常意味着您无法再侦听/订阅流。最好使用ErrorState而不是Exception。例如,包含值或异常以指示验证结果的结果@g4s8