Java 当布尔单声道为某个值时,一种不太冗长的抛出方式

Java 当布尔单声道为某个值时,一种不太冗长的抛出方式,java,spring,reactive-programming,project-reactor,Java,Spring,Reactive Programming,Project Reactor,我有很多例子,布尔变量开始一个反应序列,如果它们是某个值(大部分为false),则应该抛出一个异常,并破坏序列。比如说 Mono.just(foo.isValid()) .flatMap(b -> b ? Mono.empty() : Mono.error(new FooNotValidException(foo.detail1, foo.detail2))) .then(bar.doProcess()) .flatMap(b -> b ? Mono.empt

我有很多例子,布尔变量开始一个反应序列,如果它们是某个值(大部分为false),则应该抛出一个异常,并破坏序列。比如说

Mono.just(foo.isValid())
    .flatMap(b -> b ? Mono.empty() : Mono.error(new FooNotValidException(foo.detail1, foo.detail2)))
    .then(bar.doProcess())
    .flatMap(b -> b ? Mono.empty() : Mono.error(new BarProcessingNotSuccessful(bar.detail1, bar.detail2)))
    ....
这里,如果
foo
无效,则不会执行
bar
,并且序列被破坏并出现详细异常,如果
bar
处理失败,则情况相同


这是我设法做到的最短的,但是有很多重复,所以我想知道这是否可以减少冗长

根据Borises注释,我将上述代码示例重写为

Mono.fromRunnable(foo::isValidOrThrow) // may throw FooNotValidException    
    .then(Mono.fromRunnable(bar::doProcessOrThrow)) // may throw BarProcesingNotSuccessful 
    ....

这看起来好多了。

您似乎在使用
boolean
来表示操作和抛出成功。我会删除所有这些逻辑,然后加入
isValid
doProcess
,然后可能使用
onErrorMap
重新映射异常。