使用Java 8中的Lambda将流收集到HashMap中
- 论坛
- 使用Java 8中的Lambda将流收集到HashMap中
17 浏览
使用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()));