我有以下顺序代码,使用另一个键列表从哈希映射中删除条目。地图大小可以是50-100k条目,删除密钥列表可以是2k - 10k。我正在寻找使用新的java-8流的解决方案......
List<Long> removed = new ArrayList<Long>();
for (Long k : removelist) {
if (null != map.remove(k)) {
removed.add(k);
}
}
答案 0 :(得分:5)
一种直接翻译
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());