我正在尝试学习和理解 Java 中 lambda 表达式的使用。
我在类中编写了一个函数,该函数使用 lambda 表达式返回基于 Optional
值的 boolean 结果。
private boolean isNullOrEmpty(Optional<String> value) {
boolean result;
value.ifPresent(v -> result = isEmptyOrWhitespace(v));
return result;
}
isEmptyOrWhitespace
是我在别处定义的一个简单函数,用于检查字符串是否为空或只有空格:
private boolean isEmptyOrWhitespace(String value) {
return value == null || value.trim().isEmpty();
问题是,我无法编译它,因为编译器说
variable used in lambda should be final or effectively final
对于 result
变量。我看过Java: Assign a variable within lambda有类似的问题,但问题涉及字符串,解决方案是事先将其设置为空。
我觉得我很接近。我该如何解决这个问题?
最佳答案
问题是 result
不是有效的 final 因为它有不止一个赋值。
你可以使用Optional.map
private boolean isNullOrEmpty(Optional<String> value) {
return value.map(v -> isEmptyOrWhitespace(v)) //Or can use a Method reference as mentioned by Bohemian@
.orElse(false);
}
关于java - 在 lambda 表达式中分配局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51074307/