我正在尝试使用lambda表达式,还有其他方法可以编写过滤器(optional.filter(s -> (s.length() > 4))
)
这是完整的工作代码:
public class Main {
public static void main(String[] args) {
Optional<String> optional = Optional.of("Hello");
System.out.println(optional.filter(s -> (s.length() > 4)).get());
}
}
例如,下面是一个错误的方法,尽管它会抛出“无法解析方法长度”的编译,但是此处试图解释我正在考虑的变化类型。
optional.filter(length() > 4)
答案 0 :(得分:1)
您正在尝试引入Java不允许的语法。
这些是有效的语法:
optional.filter(s -> s.length() > 4)
或:
optional.filter(s -> {
return s.length() > 4;
})
或:
optional.filter(new Predicate<String>() {
@Override
public boolean test(String s) {
return s.length() > 4
}
})
在这种情况下,您应该首选第一个,因为它更紧凑,更易读。
答案 1 :(得分:0)
如果您不想在流链中编写复杂的操作,则始终可以分别定义Function
/ Predicate
/ etc并仅使用它们。它还提高了可读性。
例如,您可以为您的情况定义一个Predicate
,如下所示:
Predicate<String> byStrLengthCheck = s -> s.length() > 4;
并像下面一样使用上面的Predicate
:
System.out.println(optional.filter(byStrLengthCheck).get());