从Java Properties Object中删除多个条目的有效方法

时间:2016-12-08 17:55:02

标签: java properties

我有一个Properties对象,其中包含大约10k个元素。我想删除其键以特定文本开头的条目(键/值)。目前,我正在使用此代码执行此操作:

Properties temp = new Properties();
myProperties.keySet().forEach(key -> {
    if (!key.toString().startsWith("specificText")){
        temp.setProperty(key, myProperties.get(key));
    }
});
myProperties = temp;

另一个解决方案是使用putAll而不是多次调用setProperty:

Properties temp = new Properties();
temp.putAll(myProperties.entrySet().stream()
    .filter(entry -> !entry.getKey().toString().startsWith("specificText")     
    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)));
myProperties= temp;

但上述解决方案都没有足够的效率来完成我的工作。我相信应该有更好的方法来删除不需要的属性。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

修改Map的keySet会直接影响Map本身:

myProperties.keySet().removeIf(key -> key.toString().startsWith("specificText"));

来自documentation of Map.keySet()

  

该集支持元素删除,从地图中删除相应的映射...