java.io.FileFilter接口是一个功能接口,在java 8中由@FunctionalInterface注释。

在这个例子中,我们将展示如何使用lambda表达式在FileFilter中来列出子目录的名称。

文件:LambdaFileFilterExample.java -

package com.yiibai.tutorial.lambda;

import java.io.File;
import java.io.FileFilter;

/**
 * @author yiibai
 */
public class LambdaFileFilterExample {
    public static void main(String[] args) {
        File dir = new File("C:/Program Files/Java/jdk1.8.0_71");

        // Filter sub-directories using anonymous class
        File[] subDirs1 = dir.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.isDirectory();
            }
        });

        System.out.println("-------------Using anonymous class------------");
        for (File file : subDirs1) {
            System.out.println(file.getName());
        }

        // Filter sub-directories using Lambda expression
        File[] subDirs2 = dir.listFiles((file)->{return file.isDirectory();});
        System.out.println("-------------Using Lambda Expression------------");
        for (File file : subDirs2) {
            System.out.println(file.getName());
        }
    }
}

执行上面示例代码,得到以下结果:

-------------Using anonymous class------------
bin
db
include
jre
lib
-------------Using Lambda Expression------------
bin
db
include
jre
lib