我有以下顺序代码,它使用另一个键列表从哈希映射中删除条目。映射大小可以是 50-100k 个条目,删除键列表可以是 2k - 10k。我正在寻找使用新的 java-8 流的解决方案......
List<Long> removed = new ArrayList<Long>();
for (Long k : removelist) {
if (null != map.remove(k)) {
removed.add(k);
}
}
一种直接翻译是
List<Long> removed = removeList.parallelStream()
.map(key -> map.remove(key) != null ? key : null)
.filter(Objects::nonNull)
.collect(Collectors.toList());
如果可以删除,则map
步骤从键映射到键,如果不能删除,则映射到null
。 然后过滤null
。
通过直接筛选可以删除的键来缩短一点:
List<Long> removed = removeList.parallelStream()
.filter(key -> map.remove(key) != null)
.collect(Collectors.toList());
或通过密钥集的remove
方法返回boolean
,因此可以直接用作Predicate
List<Long> removed = removeList.parallelStream()
.filter(map.keySet()::remove)
.collect(Collectors.toList());