提问者:小点点

按Map对象的值筛选该对象,而不将结果收集到另一个Map中


正如问题所说。 我试图找到最好的方法过滤一个带流的地图,而不使用迭代器/移除。 我找到的所有片段都返回了一个新的地图。 那不是我想要的。 我想要的是映射本身被过滤,这样我就可以使用这个相同的对象。


共2个答案

匿名用户

因为您不想创建新的map,我建议您在map#values上调用collection#removeif

这会起作用,因为map#values返回map值的视图,对该视图所做的任何修改都反映在map中。

因此,例如,您可以使用:

Map<Integer, String> map = new HashMap<>(Map.of(1, "One", 2, "Two", 3, "Three"));
System.out.println(map); 
map.values().removeIf("Three"::equals);
System.out.println(map);

输出:

[2=Two, 1=One, 3=Three]
[1=One, 2=Two]

匿名用户

根据评论,你不能用流来做这件事。 您可以做的最接近的事情是这样的(满足“same map”要求,但“with streams”一个要求失败):

yourMap.entrySet().removeIf(k -> someRemovalCheck());