Java 我如何加入两个成功的尝试?
我还在学习Javaslang/Vavr,请原谅我的无知。我正在做的项目被困在Javaslang 2.1.0上 我的问题是:是否有一种更“实用”的方式(与命令式风格相反)来构造我的代码,以便在多个try成功后加入它们 我想独立地尝试每个输入,目的是获得尽可能多的错误信息-我不想在遇到第一个错误时停止(因此Java 我如何加入两个成功的尝试?,java,try-catch,vavr,Java,Try Catch,Vavr,我还在学习Javaslang/Vavr,请原谅我的无知。我正在做的项目被困在Javaslang 2.1.0上 我的问题是:是否有一种更“实用”的方式(与命令式风格相反)来构造我的代码,以便在多个try成功后加入它们 我想独立地尝试每个输入,目的是获得尽可能多的错误信息-我不想在遇到第一个错误时停止(因此orElse()等不会起作用)。但一旦不再发现错误,我想做一些涉及所有输入的进一步工作 我当前的代码如下(适当匿名): Try amountTry=Try.of(this::readNumber)
orElse()
等不会起作用)。但一旦不再发现错误,我想做一些涉及所有输入的进一步工作
我当前的代码如下(适当匿名):
Try amountTry=Try.of(this::readNumber)
.map(BigDecimal::valueOf)
.onFailure(此::collectError);
Try currencyTry=Try.of(this::readString)
.map(currency->currencyLookup(currency.class,currency))
.onFailure(此::collectError);
if(amountTry.issucess()&¤cyTry.issucess()){
sale.setAmount(amountTry.get(),currencyTry.get())的Amount.of;
}
你能推荐一种模式来用编程的函数风格的更多东西来替换
if()
吗?你正在寻找的Javaslang/Vavr结构是for-construction结构,它可以通过API.for
方法访问
import javaslang.control.Try;
import static javaslang.API.For;
...
For(amountTry, currencyTry)
.yield(Amount::of)
.forEach(sale::setAmount);
也就是说,如果amountTry
和currencyTry
都非空,它将通过在两个Iterable的叉积上生成一个结果值,并通过调用使用者对每个结果元素执行一个操作来创建一个Iterable
。如果有助于您更好地理解lambda表单中的显式输入类型,则以下内容与lambda表单中的内容相同:
For(amountTry, currencyTry)
.yield((BigDecimal amount, Currency currency) -> Amount.of(amount, currency))
.forEach((Amount amount) -> sale.setAmount(amount));
该库的更高版本具有用于理解Try
的重载,它将返回一个Try
实例,而不是Iterable
,如果您想留在Try
域中,这将使API变得更好