Lambda表达式编码变体的optional.filter

时间:2018-07-28 12:31:00

标签: java lambda java-8 optional

我正在尝试使用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)

2 个答案:

答案 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());