java 8 - 是否有从地图中过滤和删除的好方法?

java 8 - is there a good way to filter and remove from a map?

我想从地图中过滤几个对象,如下所示:

目前我使用两种方法

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("["));

有没有更好的过滤去除方法?

如果不是遍历所有键(或条目),而是只删除另一个映射中存在的键,第二步会更有效率:

scenarioFieldsMap.keySet().removeAll(map.keySet());

我假设您打算从原始 scenarioFieldsMap 中删除条目,而不是从您在第一步中创建的新地图中删除条目。

作为一种可能的替代方法,您可以使用 partitioningBy 收集器:

Collector<Entry<String, MyObject>, ?, Map<Boolean, Map<String, MyObject>>> collector = 
    Collectors.partitioningBy(e -> e.getKey().contains("["),
                Collectors.toMap(Entry::getKey, Entry::getValue));
Map<Boolean, Map<String, MyObject>> maps = scenarioFieldsMap.entrySet()
        .stream().collect(collector);

这样您就不会修改原始地图,而是创建两个新地图:maps.get(true) 是地图,其中键包含 "["maps.get(false) 包含所有其余地图。