如何解决折叠以返回不同的值
Either<DomainError,Boolean> maybePendingPayment = ...
我想折叠此响应以返回Either
return maybePendingPayment.fold(domainError -> domainError,pendingPayment ? GenericType.builder().build() : Optional.empty())
但是我似乎无法做到这一点,因为fold希望我返回相同的类型:
[ERROR] lower bounds: io.vavr.control.Either<xxx.yyy.DomainError,java.util.Optional<xxx.yyy.GenericType>>,java.lang.Object
[ERROR] lower bounds: java.util.Optional<T>,java.util.Optional<T>,xxx.yyy.DomainError
除了用if-else检查左侧和右侧之外,还有什么方法可以更简便地实现此目的?
解决方法
将fold
应用到Either
上(顾名思义)将其折叠并应用left或right函数,并返回所应用函数的结果。
在以下示例中,我试图更清楚地说明正在发生的事情:
public Optional<Object> verify() {
Either<DomainError,Boolean> maybePendingPayment = Either.right(true);
return maybePendingPayment.fold(Optional::of,pendingPayment -> pendingPayment ? Optional.of("pending payment") : Optional.empty());
}
如您所见,我为函数的返回类型选择了Optional<Object>
并将折页的左侧函数也包装在Optional中。解开Either
时,您的返回类型将是Optional<DomainError>
或正确函数的结果(在我的示例中是String
或Optional.empty
)。如果要返回的值有一个公共的超类型(在GenericType
和DomainError
之间),则可以选择此类型作为函数的返回类型,而不是Object
。>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。