使用Java 8中的Lambda将流收集到HashMap中

17 浏览
0 Comments

使用Java 8中的Lambda将流收集到HashMap中

我有一个HashMap,我需要使用某个函数对其进行过滤:

HashMap, Double> container
Map.Entry, Double> map = container.entrySet()
            .stream()
            .filter(k -> k.getKey().size() == size)

对于size = 2,应该是有效的:

containerBeforeFilter = {1,2,3} -> 1.5, {1,2} -> 1.3
containerAfterFilter = {1,2} -> 1.3

当我在过滤中应用函数之后,我希望再次将结果收集到一个HashMap中。然而,当我尝试应用这里建议的方法时,我得到了非法语句。

因此,以下语句在过滤之后是非法的:

.collect(Collectors.toMap((entry) -> entry.getKey(), (entry) -> entry.getValue()));

收集未改变的映射值的正确方法是什么,其中唯一的条件是满足某个键?

更新

上面代码中的错误是变量map的声明类型。它应该是Map而不是Map.Entry

因此,现在的功能代码是:

Map, Double> map = container.entrySet()
            .stream()
            .filter(k -> k.getKey().size() == size)
            .collect(Collectors.toMap(entry -> entry.getKey(), entry -> entry.getValue()));

0