如何从Set/Map中删除多个元素并知道哪些元素被删除了?
2022-09-01 11:40:38
我有一个方法,必须从一些(可能很大)中删除(小)中列出的任何元素。但不会,因为我需要返回实际删除的所有键,因为映射可能包含也可能不包含需要删除的键。Set<K> keysToRemove
Map<K,V> from
removeAll()
老式代码很简单:
public Set<K> removeEntries(Map<K, V> from) {
Set<K> fromKeys = from.keySet();
Set<K> removedKeys = new HashSet<>();
for (K keyToRemove : keysToRemove) {
if (fromKeys.contains(keyToRemove)) {
fromKeys.remove(keyToRemove);
removedKeys.add(keyToRemove);
}
}
return removedKeys;
}
同样的,使用流编写:
Set<K> fromKeys = from.keySet();
return keysToRemove.stream()
.filter(fromKeys::contains)
.map(k -> {
fromKeys.remove(k);
return k;
})
.collect(Collectors.toSet());
我发现这有点简洁,但我也发现lambda太笨拙了。
任何建议如何以不那么笨拙的方式达到相同的结果?