以下方法实现了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;
};
我该怎么做?
答案 0 :(得分:5)
为了摆脱return
语句以及花括号,lambda表达式的主体必须是单个表达式,其类型是lambda表达式的返回类型 - {{1在你的情况下。
您的String
会返回findFirst()
。您希望将其映射到Optional<Map.Entry<String,String>>
(Optional<String>
是条目的关键字),如果条目为空则返回String
。
您可以使用null
&#39; Optional
方法实现这一目标:
map