gpt4 book ai didi

Java 8 Stream 通过相同的昂贵方法调用进行过滤和分组

转载 作者:太空狗 更新时间:2023-10-29 23:04:12 26 4
gpt4 key购买 nike

我正在寻找一种以干净的方式优化 Stream 处理的方法。

我有这样的东西:

try (Stream<Path> stream = Files.list(targetDir)) {
Map<String, List<Path>> targetDirFilteredAndMapped = stream.parallel()
.filter(path -> sd.containsKey(md5(path)))
.collect(Collectors.groupingBy(path -> md5(path)));
} catch (IOException ioe) { // manage exception }

而且由于 md5 函数非常昂贵,我想知道是否有一种方法可以让每个文件只调用一次。

有什么建议吗?

最佳答案

您可以创建一些 PathWrapper包含 Path 的对象实例及其对应的 md5(path) .

public class PathWrapper
{
Path path;
String md5; // not sure if it's a String
public PathWrapper(Path path) {
this.path = path;
this.md5 = md5(path);
}
public Path getPath() {return path;}
public String getMD5() {return md5;}
}

然后将您的流映射到 Stream<PathWrapper> :

try (Stream<Path> stream = Files.list(targetDir)) {
Map<String, List<Path>> targetDirFilteredAndMapped =
stream.parallel()
.map(PathWrapper::new)
.filter(path -> sd.containsKey(path.getMD5()))
.collect(Collectors.groupingBy(PathWrapper::getMD5,
Collectors.mapping(PathWrapper::getPath,
Collectors.toList())));
} catch (IOException ioe) { /* manage exception */ }

关于Java 8 Stream 通过相同的昂贵方法调用进行过滤和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39764562/

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