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

时间:2015-12-29 08:55:45

标签: java lambda java-8 optional

以下方法实现了BiFunction,其中包含Map<String,String>和要搜索的值。它在Entry中搜索包含给定值的Map并返回相应的密钥。

这个实现有效,但我想编写没有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;
};

我该怎么做?

1 个答案:

答案 0 :(得分:5)

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

您的String会返回findFirst()。您希望将其映射到Optional<Map.Entry<String,String>>Optional<String>是条目的关键字),如果条目为空则返回String

您可以使用null&#39; Optional方法实现这一目标:

map