如何从Set/Map中删除多个元素并知道哪些元素被删除了?
2022-09-01 11:40:38
						我有一个方法,必须从一些(可能很大)中删除(小)中列出的任何元素。但不会,因为我需要返回实际删除的所有键,因为映射可能包含也可能不包含需要删除的键。Set<K> keysToRemoveMap<K,V> fromremoveAll()
老式代码很简单:
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太笨拙了。
任何建议如何以不那么笨拙的方式达到相同的结果?