Lambda表达式

Lambda表达式
虹色轨迹🌠二、Lambda表达式
JDK8之后,java支持了lambda表达式这个特性.
lambda可以用更精简的代码创建匿名内部类.但是该匿名内部类实现的接口只能有一个抽象方法,否则无法使用!
lambda表达式是编译器认可的,最终会将其改为内部类编译到class文件中
代码案例package lambda;
import java.io.File;
import java.io.FileFilter;
/**
* @author 老安
* @data 2022/7/1 20:58
* JDK8之后推出了一个新的特性:lambda表达式
* lambda表达式可以用更精简的方式创建匿名内部类
* 语法:
* (参数列表)->{
* 方法体
* }
* 不是所有的匿名内部类创建的情景都可以替换为lambda表达式,只有实现的接口内部只能有一个抽象方法时,才可以使用lambda表达式
*/
public class LambdaDemo {
public static void main(String[] args) {
//匿名内部类
FileFilter filter = new FileFilter() {
public boolean accept(File pathname) {
return pathname.getName().contains("o");
}
};
//可以忽略接口名(new FileFilter)和方法名(public boolean accept(){})
//将方法的参数声明放在接口括号中,然后用->符号连接{}
//忽略接口名:因为声明时FileFilter filter1,已经表明要实例化的对象了
//忽略方法名:因为lambda表达式支持的接口只允许有一个抽象方法
FileFilter filter1 = (File pathname) -> {
return pathname.getName().contains("o");
};
//可以忽略参数类型(File)
//因为只有一个方法,方法的参数顺序已经固定,所以参数无序表明类型
FileFilter filter2 = (pathname) -> {
return pathname.getName().contains("o");
};
//如果方法只有一个参数时,()可以省略
FileFilter filter3 = pathname -> {
return pathname.getName().contains("o");
};
//如果方法体只有一句代码时,那么可以将方法体的"{}"省略,如果含有return,则return要一同忽略
FileFilter filter4 = pathname -> pathname.getName().contains("o");
File file = new File(".");
File[] files = file.listFiles(pathname -> pathname.getName().contains("o"));
for (int i = 0; i < files.length; i++) {
System.out.println(files[i]);
}
}
}