在 lambda 表达式内分配局部变量

cs9*_*s95 4 java string lambda option-type

我正在尝试学习和理解 Java 中 lambda 表达式的使用。

我在一个类中编写了一个函数,该函数根据Optional使用 lambda 表达式的值返回布尔结果。

private boolean isNullOrEmpty(Optional<String> value) {
  boolean result;
  value.ifPresent(v -> result = isEmptyOrWhitespace(v));

  return result;
} 
Run Code Online (Sandbox Code Playgroud)

isEmptyOrWhitespace是我在其他地方定义的一个简单函数,用于检查字符串是否为空或仅包含空格:

private boolean isEmptyOrWhitespace(String value) {
    return value == null || value.trim().isEmpty();
Run Code Online (Sandbox Code Playgroud)

问题是,我无法编译它,因为编译器说

variable used in lambda should be final or effectively final
Run Code Online (Sandbox Code Playgroud)

对于result变量。我见过Java:在lambda中分配一个变量也有类似的问题,但问题涉及String,解决方案是预先将其设置为null。

我觉得我已经很接近了。我怎样才能解决这个问题?

use*_*er7 5

问题是这实际上result并不是最终的,因为有多个作业分配给它。

您可以使用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);
} 
Run Code Online (Sandbox Code Playgroud)