假设我有这个方法
public Optional<String> validateAndReturnErrorMessage(SomeEcommerceSale s) {
Optional<String> errorWithItem = validateItem(s.getItem());
if (errorWithItem.isPresent()) return errorWithItem;
Optional<String> errorWithPayment = validatePayment(s.getPayment());
if (errorWithPayment.isPresent()) return errorWithPayment;
// assume I have several other cases like the 2 above
return Optional.empty(); // meaning there were no errors
我的问题是,因为OrElse和OrElseGet
return
编辑
我想逐一检查验证,因为它们是外部的,而且很重。这样,我只会调用必要的
如果要验证的项目列表较长/动态,则可能需要使用流:
return Stream.<Supplier<String>>of(s::getItem, req::getPayment, ...)
.map(s -> this.validateItem(s.get()))
.filter(Predicate.not(Optional::isEmpty)) //or filter(o -> !o.isEmpty())
.findFirst();
只需使用或
:
如果存在值,则返回描述该值的
可选
,否则返回由供应函数生成的可选
。
return validatePayment(s.getItem()).or(() -> validatePayment(s.getPayment()));
这种情况是可选的。为添加了或。它是在Java9中添加的,所以如果您仍然使用Java8,那么就不能使用它。
return validateItem(s.getItem())
.or(() -> validatePayment(req.getPayment()))
.or(() -> /*another one*/);
如果您仍停留在Java8上,那么可以编写一个助手方法
public static <T> Optional<T> firstNonEmpty(List<Supplier<Optional<T>>> supplierList) {
for (Supplier<Optional<T>> supplier : supplierList) {
Optional<T> value = supplier.get();
if (value.isPresent()) return value;
}
return Optional.empty();
}
它是这样使用的:
return firstNonEmpty(
Arrays.asList(
() -> validateItem(s.getItem()),
() -> validatePayment(req.getPayment()),
() -> /*another one*/
)
);
我正在为服务开发测试用例。 另一个代码:
本文向大家介绍Java函数式编程(六):Optional,包括了Java函数式编程(六):Optional的使用技巧和注意事项,需要的朋友参考一下 选取单个元素 直觉来说选取单个元素肯定会比选取多个要简单得多,不过这里也存在一些问题。我们先看下一般的做法的问题是什么,然后再看下如何用lambda表达式来解决它。 我们先新建一个方法来查找一个以特定字母开头的元素,然后打印出来。 这个方法简直跟刚过去
但是如果serviceworkList列表为空,则变量“validate”为false。我知道allMatch的规范,如果list为空,则返回为true。 有什么建议,我可以如何重建流,如果列表列表为空,我会得到假?
当我在输入元素中输入第一个字符时,我得到“空字符串”。 在我看来,我在输入元素中输入一个字符,触发“onChange”事件,运行函数getTitle,设置“title”变量,该变量连接到useState钩子,然后控制结果。按照这个推理,我希望输入第一个字符。相反,我得到的是“空字符串”。从第二个字符开始,控制台打印字符。 对于“onInput”,函数也会发生同样的情况。 如何解决这个问题,为什么会
问题内容: 在Python中,我想编写一个返回另一个函数的函数。返回的函数应该可以通过参数调用,并返回高度和半径为圆柱的体积。 我知道如何从Python中的函数返回 值 ,但是如何返回 另一个函数 ? 问题答案: 使用Python尝试一下: 这样使用它,例如与和: 注意,返回一个函数很简单,只需在函数内部定义一个新函数,然后在最后返回它- 小心地为每个函数传递适当的参数。仅供参考,从另一个函数返回
问题内容: 我想使用java8替换以下代码: 以下伪代码由于没有方法而无法使用,但无论如何它说明了我的目的: 问题答案: 对于Java 9或更高版本,最可能需要的是: 使用vavr之类的方法进行固化可能会得到更整齐的代码,但是我还没有尝试过。