gpt4 book ai didi

java - 使用 lambda 的嵌套过滤器

转载 作者:行者123 更新时间:2023-11-30 07:48:32 25 4
gpt4 key购买 nike

我正在尝试编写多级过滤器代码。我有文件夹和文件。

public class Folder {
String name;
List<Folder> folders;
List<File> files;
...
}

public class File {
String name;
String type;
...
}

我需要一个过滤器来寻找一些属性,例如name,可以是文件夹/文件名。我写了一段适用于一个级别的代码,但我不知道如何寻找两个级别的循环。

最终结果将是一个文件夹列表:名称与“名称过滤器”匹配的文件夹或文件名与过滤器匹配的文件夹。

List<Folder> result = folders.stream()
.filter(folder -> folder.getFiles().stream().anyMatch(file -> file.getName().contains(filter)))
.collect(Collectors.toList());

最佳答案

我认为向 Folder 类添加一个辅助方法会更好,它将递归地将嵌套文件夹展平为 Stream:

class Folder {
String name;
List<Folder> folders;
List<File> files;

Stream<Folder> flatten() {
return Stream.concat(Stream.of(this), folders.stream().flatMap(Folder::flatten));
}
}

之后,您可以使用flatMap(...) 得到最终结果。

List<Folder> result = folders.stream()
.flatMap(Folder::flatten)
.filter(folder -> folder.getFiles()
.stream()
.anyMatch(file -> file.getName().contains(filter)))
.collect(Collectors.toList());

关于java - 使用 lambda 的嵌套过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49138012/

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