JDK8-1-Lambda表达式(1)-简介

JDK8-1-Lambda表达式(1)-简介

Lambda也称为匿名函数,是 JDK8 的新特性之一,它允许程序将方法作为值传递(类似JS中的回调方法),相比 JDK8 之前的代码,Lambda语法更简洁。
看一个简单的例子,列出目录中的文件夹:

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

public class FileFilterTest {

    private static final String MUSIC_DIR = "F:\\My_Music";

    public static File[] listDirectory(File file) {
        return file.listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.isDirectory();
            }
        });
    }

    public static void main(String[] args) {
        File musicDir = new File(MUSIC_DIR);
        File[] files = listDirectory(musicDir);
        for (File f : files) {
            System.out.println(f.getName());
        }
    }
}

此例使用JDK8之前的语法,其中 listFiles的入参为 FileFilter 类型,此处创建了一个匿名类对象, 用 Lambda 语法改造如下:

import java.io.File;

public class FileFilterTest2 {

    private static final String MUSIC_DIR = "F:\\My_Music";

    public static File[] listDirectory1(File file) {
        return file.listFiles((File pathname) -> {
            return pathname.isDirectory();
        });
    }

    public static File[] listDirectory2(File file) {
        /**
         * 方法体中只有一行代码,所以{} return ;可以省略
         */
        return file.listFiles(pathname -> pathname.isDirectory());
    }

    public static File[] listDirectory3(File file) {
        /**
         * 方法引用::语法(即“把这个方法作为值”)
         */
        return file.listFiles(File::isDirectory);
    }

    public static void main(String[] args) {
        File musicDir = new File(MUSIC_DIR);
        File[] files = listDirectory3(musicDir);
        for (File f : files) {
            System.out.println(f.getName());
        }
    }
}

其中 listDirectory3 方法中仅有一行代码:

 file.listFiles(File::isDirectory);

::是Java 8中的方法引用语法(即“把这个方法作为值”)将其传给listFiles方法

你可能感兴趣的:(JavaSE,java,开发语言)