Cómo filtrar el listado de directorios mediante el uso de una propiedad de la lista resultante sí en Java?

espiritual:

Tengo un directorio llamado /home/ftpque 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 dir1y dir3pero 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());

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=234070&siteId=1
Recomendado
Clasificación