HoT*_*icE -1 java lambda optional java-8
以下方法实现了一个BiFunctiona 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;
};
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
为了摆脱return语句以及花括号,lambda表达式的主体必须是单个表达式,其类型是lambda表达式的返回类型 - String在您的情况下.
你的findFirst()回报了Optional<Map.Entry<String,String>>.您希望将其映射到Optional<String>(其中String是条目的键)并返回null它是否为空.
您可以实现,使用Optional的map方法:
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)
| 归档时间: |
|
| 查看次数: |
201 次 |
| 最近记录: |