I have the following directory structures:
/path/to/stuff/org/foo/bar/
/path/to/stuff/org/foo/bar/1.2.3/
/path/to/stuff/org/foo/bar/1.2.3/myfile.ext
/path/to/stu
Adding to @a-better-oliver's answer, here is what you can do if your action declares IOExceptions.
You can treat the filtered stream as an Iterable
, and then do your action in a regular for-each loop. This way, you don't have to handle exceptions inside a lambda.
try (Stream pathStream = Files
.walk(Paths.get("/path/to/stuff/"))
.filter(p -> p.toString().endsWith(".ext"))
.map(p -> p.getParent().getParent())
.distinct()) {
for (Path file : (Iterable) pathStream::iterator) {
// something that throws IOException
Files.copy(file, System.out);
}
}
Found that trick here: https://stackoverflow.com/a/32668807/1207791