gpt4 book ai didi

java - 如何使用基于另一个列表的 lambda 从列表中删除元素

转载 作者:IT老高 更新时间:2023-10-28 20:52:35 25 4
gpt4 key购买 nike

我有文件路径列表:.

List<Path> filePaths; //e.g. [src\test\resources\file\15\54\54_exampleFile.pdf]
上面的

54指的是文件ID

然后我获得 String Id 的 Set,我的应用程序可以按如下方式处理:

Set<String> acceptedIds = connection.getAcceptedIDs(); //e.g. elements [64, 101, 33]

如何使用 Java 8 lambdas filter 滤除 filePaths 中不包含 acceptedIds 中包含的任何可接受 Id 的所有元素code>集合集合。

换句话说,我想在 filePaths 中仅保留具有 acceptedIds 集的 id 的路径。例如,54 不在上面的列表中,因此被删除。

filePaths.stream().filter(...).collect(Collectors.toList());

最佳答案

最有效的方法是从路径中提取ID,然后尝试在Set中找到它,使每个过滤器在恒定时间内执行,即O(1)给出一个整体O(n),其中n是路径数:

filePaths.stream()
.filter(p -> acceptedIds.contains(p.getParent().getFileName().toString()))
.collect(Collectors.toList());

如果执行相反的方法,在路径中搜索每个 acceptedIds(与其他答案一样),每个过滤器都是 O(m*k),其中 macceptedIds 的数量,k 是平均路径长度,给出一个整体 O(n * m * k) ,即使是中等大小的集合,它的性能也会很差。

关于java - 如何使用基于另一个列表的 lambda 从列表中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32335335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com