Java 8 将不同结果类型的多个“Try”实例组合为应用程序
在Vavr中是否有一个用于组合Java 8 将不同结果类型的多个“Try”实例组合为应用程序,java-8,functional-programming,vavr,Java 8,Functional Programming,Vavr,在Vavr中是否有一个用于组合Try实例的api,它类似于Scalaz应用程序操作符@的工作方式 具体来说,如果我有两个以上的Try实例,例如Try、Try和Try,我希望使用3-arg函数以应用方式组合这些实例 我正在寻找一个类似于以下内容的函数签名: static <X, Y, Z, R> Try<R> combine(Try<X> x, Try<Y> y, Try<Z> z, Function3<X,Y,Z,R> fu
Try
实例的api,它类似于Scalaz应用程序操作符@
的工作方式
具体来说,如果我有两个以上的Try
实例,例如Try
、Try
和Try
,我希望使用3-arg函数以应用方式组合这些实例
我正在寻找一个类似于以下内容的函数签名:
static <X, Y, Z, R> Try<R> combine(Try<X> x, Try<Y> y, Try<Z> z, Function3<X,Y,Z,R> func
静态尝试组合(尝试x、尝试y、尝试z、函数3 func
据我所知,它不直接支持这种用法。但是,您可以使用flatMap实现它:
static <X, Y, Z, R> Try<R> combine(Try<X> tx, Try<Y> ty, Try<Z> tz, Function3<X,Y,Z,R> func) {
return tx.flatMap(x -> ty.flatMap(y -> tz.map(z -> func.apply(x, y, z))));
}
如果您比较输入和输出类型,您可以看到这实际上交换了Try
和List
容器的位置。这对于monad来说非常习惯,尽管通常您会使用应用程序映射操作而不是flatMap来实现它
或者,使用,其设计用于应用程序样式(通过
验证。组合)。据我所知,它不直接支持该用法。但是,您可以使用flatMap实现:
static <X, Y, Z, R> Try<R> combine(Try<X> tx, Try<Y> ty, Try<Z> tz, Function3<X,Y,Z,R> func) {
return tx.flatMap(x -> ty.flatMap(y -> tz.map(z -> func.apply(x, y, z))));
}
如果您比较输入和输出类型,您可以看到这实际上交换了Try
和List
容器的位置。这对于monad来说非常习惯,尽管通常您会使用应用程序映射操作而不是flatMap来实现它
或者,使用,其设计用于应用程序风格(通过验证。组合)。是的,尽管对于超过3个Try
实例,那些嵌套的flatMap
调用可能会有点麻烦!我可以使用验证,但它似乎不适合我的用例(除支持的应用程序语法外)。谢谢。或者我可以写一个方便的方法,完全按照你的建议:thinking face:@divelhpremdeep我已经编辑了答案,提供了另一种选择-序列
。是的,虽然对于3个以上的Try
实例,那些嵌套的平面图
调用可能会有点麻烦!我可以使用验证代码>,但它似乎不太适合我的用例(除了它支持的应用程序语法)。谢谢。或者我可以编写一个方便的方法,完全按照您的建议执行:thinking face:@divelhpremdeep我编辑了答案,以提供另一种选择-序列
。