我有一个 HashMap,需要使用某些函数进行过滤:
HashMap<Set<Integer>, Double> container
Map.Entry<Set<Integer>, 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<Set<Integer>, Double> map = container.entrySet()
.stream()
.filter(k -> k.getKey().size() == size)
.collect(Collectors.toMap(entry -> entry.getKey(), entry -> entry.getValue()));
Map<Set<Integer>, Double> collect = container.entrySet().stream().filter(k -> k.getKey().size() == size).collect(Collectors.toMap(Entry::getKey, Entry::getValue));
- Flowncontainer.keySet()
来简化。 - Manos Nikolaidis