如何找到键包含给定前缀的映射值的总和?

Aas*_*tha 0 java java-stream

我有一个具有以下签名的方法:

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 表达式中的参数类型不兼容

我在这里做错了什么?

Amo*_*len 5

问题是它entrySet()是一个集合Entry<>,没有单独的kv。你应该尝试这样的事情:

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)