У меня есть каталог с именем /home/ftp
, который содержит такие подкаталоги, как этот:
dir1
dir2
dir3
dir1.ok (this is just an empty file)
dir3.ok (this is just an empty file)
Код должен обрабатывать файлы только в тех каталогах, которые имеют соответствующий ".ok"
файл. Так, например,в этом примере код должен выбрать те файлы для обработки, которые находятся под dir1
и dir3
, но не dir2
.
Я мог бы сделать это «обычным» способом:
List<String> list = Arrays.asList(new File("/home/ftp").list());
Set<String> set = new HashSet<>();
List<String> dirToProcess = new ArrayList<>();
for (String name : list){
name = name.contains(".ok") ? name.substring(0, name.indexOf(".ok")) : name;
if (!set.add(name)){
dirToProcess.add(name);
}
}
// now dirToProcess contains the directory names which should be processed
Но я действительно хочу сделать это, используя функциональную Java (я использую Java8), используя Streams.Как я могу рефакторинг этого кода для достижения этого?