如何在没有return语句的情况下编写这个lambda表达式?

HoT*_*icE -1 java lambda optional java-8

以下方法实现了一个BiFunctiona Map<String,String>和一个值来搜索.它搜索的EntryMap包含给定值,并返回相应的键.

这个实现有效,但是我想写一个没有return语句的lambda表达式,以使代码更优雅.

private BiFunction<Map<String, String>, String, String> findName = (m, s) -> {
    Map.Entry<String, String> e = 
        m.entrySet()
         .stream()
         .filter(entry -> entry.getValue() != null && !entry.getValue().isEmpty() && entry.getValue().equals(s))
         .findFirst()
         .orElse(null);
    return e != null ? e.getKey() : null;
};
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

Era*_*ran 5

为了摆脱return语句以及花括号,lambda表达式的主体必须是单个表达式,其类型是lambda表达式的返回类型 - String在您的情况下.

你的findFirst()回报了Optional<Map.Entry<String,String>>.您希望将其映射到Optional<String>(其中String是条目的键)并返回null它是否为空.

您可以实现,使用Optionalmap方法:

private BiFunction<Map<String, String>, String, String> findName = (m, s) -> 
    m.entrySet().stream()
            .filter(entry -> entry.getValue() != null && !entry.getValue().isEmpty() && entry.getValue().equals(s))
            .findFirst()
            .map(Map.Entry::getKey)
            .orElse(null);
Run Code Online (Sandbox Code Playgroud)