昔、再帰関数で書いたのかもしれないけど、改めて再帰関数、結局これしか思いつかないけど
久々に for 文を書いてみました。(Java8 になってから、本当に for文を書く機会が減った。。。)
要の再帰関数は、、
private List<File> parse(File file, List<File> list){ list.add(file); if (file.isDirectory()){ for(File f:file.listFiles()){ parse(f, list); } } return list; }
という誰でもすぐに思いつくものです。File の List を取得することにすれば、
List → Stream や、好きなことをできるので、これだけでもいいのですが、
Consumer
private void parse(File file, Consumer<File> c){ c.accept(file); if (file.isDirectory()){ for(File f:file.listFiles()){ parse(f, c); } } }
そこで以下のとおり全体を書きました。