正如问题所说。 我试图找到最好的方法过滤一个带流的地图,而不使用迭代器/移除。 我找到的所有片段都返回了一个新的地图。 那不是我想要的。 我想要的是映射本身被过滤,这样我就可以使用这个相同的对象。
因为您不想创建新的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());