Como diretório filtrar listando usando uma propriedade da própria lista resultante em Java?

espiritual:

Eu tenho um diretório chamado /home/ftpque contém sub-diretórios como esta:

dir1
dir2
dir3
dir1.ok (this is just an empty file)
dir3.ok (this is just an empty file)

O código só deve processar os arquivos em diretórios que têm um correspondente ".ok"arquivo. Assim, por exemplo. Neste exemplo, o código deve escolher os arquivos para processamento que são encontrados sob dir1e dir3, mas não dir2.

Eu poderia fazer isso da maneira "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

Mas eu realmente quero fazer isso usando Java funcional (estou usando Java8) usando Streams. Como posso refatorar esse código para alcançá-lo?

também:

Acho que o que você está esperando como uma saída é:

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());

Acho que você gosta

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