gpt4 book ai didi

java - 使用流 api 查找最大的目录

转载 作者:行者123 更新时间:2023-12-02 05:02:33 28 4
gpt4 key购买 nike

我有一个 FileCriteria 列表。文件标准是:

public class FileCriteria {

private final Path path;
private final long size;

public FileCriteria(Path path, long size) {
this.path = path;
this.size = size;
}

public Path getPath() {
return path;
}

public Path getParentPath() {
return path.getParent() == null ? Paths.get("") : path.getParent();
}

public long getSize() {
return size;
}
}

该列表包含每个文件和目录的FileCriteria一个目录,换句话说,一个完整的文件树。现在我需要找到其中包含最大文件的目录(其中所有文件的大小之和),不包括子目录,它们计为文件大小0。

我的基于 Stream API 的解决方案是这样的:

List<FileCriteria> fileCriterias = ...

Map<Path, Long> dirToSize = fileCriterias.stream()
.collect(groupingBy(FileCriteria::getParentPath, summingLong(FileCriteria::getSize)));

List<Path> largestDirs = dirToSize.keySet().stream()
.sorted((p1, p2) -> -Long.compare(dirToSize.get(p1), dirToSize.get(p2)))
.limit(10)
.collect(toList());

这可以通过某种方式简化吗?我的意思是从可读性的角度来看。

Prometheus的提示带来了以下改进:

Map<Path, Long> dirToSize = fileCriterias.stream()
.collect(groupingBy(FileCriteria::getParentPath, summingLong(FileCriteria::getSize)));

List<Path> largestDirs = dirToSize.keySet().stream()
.sorted(comparing(dirToSize::get).reversed())
.limit(10)
.collect(toList());

最佳答案

看起来已经相当简单了。
您可以使用 Comparison()(自然顺序)和reverse() 一起按降序排序。

List<Path> largestDirs = dirToSize.keySet().stream()
.sorted(comparing(dirToSize::get).reversed())
.limit(10)
.collect(toList());

关于java - 使用流 api 查找最大的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28121488/

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