espiritual:
Tengo un directorio llamado /home/ftp
que contiene subdirectorios de esta manera:
dir1
dir2
dir3
dir1.ok (this is just an empty file)
dir3.ok (this is just an empty file)
El código sólo debe procesar los archivos en directorios que tienen un correspondiente ".ok"
archivo. Así, por ejemplo. en este ejemplo, el código debe recoger esos archivos en el proceso que se encuentran bajo dir1
y dir3
pero no dir2
.
Podría hacer esto de la manera "normal":
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
Pero lo que realmente quiero hacer esto utilizando Java funcional (estoy usando Java8) usando corrientes. ¿Cómo puedo refactorizar el código para lograrlo?
también:
Creo que lo que se está esperando como una salida es:
List<String> dirToProcess = list.stream()
.filter(name -> name.contains(".ok") && list.contains(name.substring(0, name.indexOf(".ok"))))
.map(name -> name.substring(0, name.indexOf(".ok")))
.collect(Collectors.toList());