例如:
private String test(Optional myOptional)
{
myOptional.ifPresent(() -> return "1");
return "0";
}
所以当我调用 test(myOptional) 时它将返回“1”;
您无法“突破” lambda 主体并从封闭方法返回值。 lambda 中使用的
return
仅在 lambda 主体的范围内起作用。
惯用的方法是正确利用
Optional
API:
private String test(Optional<Object> myOptional) {
return myOptional
.map(s -> "1")
.orElse("0");
}
另外,请记住
Optional
s 不应用作方法参数:
您遇到的问题是
return
被视为 lambda 函数的返回,而不是 'test' 函数的返回。
不希望得到一个返回值的函数。它需要一个
Consumer<T>
,它实际上是一个只接受一个参数且不返回任何内容的函数。作为一个普通函数,而不是 lambda,它看起来像这样:
void myConsumer(String s)
{
System.out.println(s);
}
您可能想使用
isPresent
('
is'而不是'if'):
if (myOptional.isPresent())
{
return "1";
}
else
{
return "0";
}
或使用三元运算符:
return myOptional.isPresent() ? "1" : "0";
顺便说一句,您正在使用
Optional
的原始类型。这将导致编译器警告。您应该使用泛型来声明
Optional
将持有什么类型:Optional<String> myOptional = /*something*/;
这将为您提供编译时类型安全性,
Optional
不会保存字符串以外的值。
public void executeAction(final Consumer<EntityManager> action) {
//Any code
}
final AtomicInteger rowsDeleted = new AtomicInteger();
jpaManager.executeAction((aux) -> {
rowsDeleted.set(aux.createQuery(delete).executeUpdate());
});
return rowsDeleted.get();