【发布时间】:2015-10-12 05:16:22
【问题描述】:
我想从地图中过滤几个对象,如下所示:
- 使用过滤后的结果创建新地图
- 从原始地图中删除
目前我用两种方法来做
Map<String, MyObject > map = scenarioFieldsMap.entrySet().stream()
.filter(e -> e.getKey().contains("["))
.collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue()));
scenarioFieldsMap.entrySet().removeIf(e -> e.getKey().contains("["));
有没有更好的过滤和去除方法?
【问题讨论】:
-
如果在您的手术后它们都相同,为什么还需要两张地图?如果您想要两个不同的实例,您可以从原始地图中删除元素,然后使用复制构造函数。
-
map.keySet().removeIf(k -> k.contains("[")); -
@AlexisC。他们不会是一样的。 OP 希望从原始地图中删除一些条目,新地图应包含所有已删除的条目。
-
@Eran 是的,但是代码并没有反映这一点。我猜 OP 的意思是
scenarioFieldsMap.entrySet().removeIf(e -> e.getKey().contains("[")); -
@AlexisC.是的,这一定是一个错字。否则,OP 将以一个空映射结束(在第二步中删除了在第一步中添加的所有条目之后)。
标签: java java-8 java-stream