java stream 两级 目录 分组 示例
时间: 2023-08-11 19:12:29 浏览: 39
假设有如下目录结构:
```
root
├── dir1
│ ├── file1.txt
│ ├── file2.txt
│ └── file3.txt
└── dir2
├── file4.txt
├── file5.txt
└── file6.txt
```
我们可以使用 Java 8 的 Stream API 将这些文件按照目录分组,示例代码如下:
```java
import java.io.File;
import java.util.Map;
import java.util.stream.Collectors;
public class GroupFilesByDirectory {
public static void main(String[] args) {
File root = new File("root");
Map<String, Map<String, File>> groups =
// 获取目录下的所有文件
Stream.of(root.listFiles())
// 过滤掉非目录
.filter(File::isDirectory)
// 将每个目录下的文件按照文件名分组
.collect(Collectors.toMap(
File::getName, // 目录名作为一级分组的键
dir -> Stream.of(dir.listFiles())
.filter(File::isFile)
.collect(Collectors.toMap(
File::getName, // 文件名作为二级分组的键
file -> file
))
));
// 输出结果
groups.forEach((dir, files) -> {
System.out.println(dir + ":");
files.forEach((file, path) -> {
System.out.println(" " + file + " - " + path);
});
});
}
}
```
输出结果:
```
dir1:
file1.txt - root/dir1/file1.txt
file2.txt - root/dir1/file2.txt
file3.txt - root/dir1/file3.txt
dir2:
file4.txt - root/dir2/file4.txt
file5.txt - root/dir2/file5.txt
file6.txt - root/dir2/file6.txt
```