如何在JAVA中使用lambda函数中的循环?

Chi*_*ain 0 java lambda filter java-stream

我想使用lambda函数创建一个FileNameFilter.

我的主要问题是我想在函数内部引入一个循环.我尝试使用过滤器,但我无法根据外部列表创建过滤器.

以下是我的代码:

    File targetDir = new File(path);
    FilenameFilter deleteFilter = new FilenameFilter() {
        @Override
        public boolean accept(File dir, String name) {
            for(String tag: pageTagsList){
                if(name.equals(tag))
                    return true;
            }
            return false;
        }
    };
    File[] foundFiles = targetDir.listFiles(deleteFilter);
Run Code Online (Sandbox Code Playgroud)

我想做的是这样的:

File[] foundFiles = targetDir.listFiles(
            (dir,name)->pageTagsList.stream()
            .filter(//code to filter here)
            .orElse(false)
            );
Run Code Online (Sandbox Code Playgroud)

有没有正确的方法来做到这一点?

Aar*_*vis 7

你可以让lambda成为任何代码块(尽管从里面引用的任何变量都必须是最终的).为了达到预期的效果,您可以执行以下操作:

File[] foundFiles = targetDir.listFiles((dir, name) -> pageTagsList.stream().anyMatch(name::equals));
Run Code Online (Sandbox Code Playgroud)