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。
我觉得我已经很接近了。我怎样才能解决这个问题?
问题是这实际上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)