我有一个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;
但上述解决方案都没有足够的效率来完成我的工作。我相信应该有更好的方法来删除不需要的属性。非常感谢任何帮助。
答案 0 :(得分:2)
修改Map的keySet会直接影响Map本身:
myProperties.keySet().removeIf(key -> key.toString().startsWith("specificText"));
来自documentation of Map.keySet():
该集支持元素删除,从地图中删除相应的映射...