我有一个具有以下签名的方法:
int sum(Map<String, Integer> map, String target) { }
Run Code Online (Sandbox Code Playgroud)
我试图找到键具有前缀作为给定target字符串的条目的值的总和。我想使用流来做到这一点。这就是我所做的:
return map.entrySet().stream()
.filter((k, v) -> k.startsWith(target))
.map((k, v) -> v)
.sum();
Run Code Online (Sandbox Code Playgroud)
编译器给出以下错误:
错误:类型不兼容:lambda 表达式中的参数类型不兼容
我在这里做错了什么?
问题是它entrySet()是一个集合Entry<>,没有单独的k和v。你应该尝试这样的事情:
return map.entrySet().stream()
.filter((entry) -> entry.getKey().equals(target))
.mapToInt((entry) -> entry.getValue())
.sum();
Run Code Online (Sandbox Code Playgroud)
或者对于您编辑的版本startsWith:
return map.entrySet().stream()
.filter((entry) -> entry.getKey().startsWith(target))
.mapToInt((entry) -> entry.getValue())
.sum();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |