java - 在 lambda 表达式中分配局部变量

标签 java string lambda option-type

我正在尝试学习和理解 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/

相关文章:

c++ - C++ lambdas 和模板的交互

json - 解析从 iOS swift 3 中的 lambda 返回的 AWSTask 响应

java - 如何获取给定对象中所有 "participate"的类?

java - Spring MVC 、Tomcat 和 mysql 的开发环境

java - 输入正确,但输出与输入不符

python - 将字符串列表 [ '3' , '1' , '2' ] 转换为排序整数列表 [1, 2, 3]

javascript - 原始字符串到普通字符串 javascript

java - 为什么相同的整数值在 Java 中有不同的内存地址?

c++ - 如何将 LPCSTR 传递给 C++ 函数转换为字符串并返回 LPCSTR?

python - 如何减少 lambda 表达式中辅助函数的使用?