1.lambda表达式
- JDK8之后推出的lambda表达式
- lambda表达式可以"面向函数式编程"
- lambda表达式给我们的直观感受是可以更简洁的语法创建匿名内部类
- 当要实现的接口中【只有一个抽象方法】时,才可以使用lambda表达式替换原始的匿名内部类形式
- 表达式实际是隐去new的接口名和方法名(因为接口中只有一个方法)
- 表达式不是java虚拟机认可的,而是编译器认可的,最终被改为内部类形式编译到class文件中
基本语法
(参数列表)->{
方法体
}
FileFilter filter=new FileFilter() {
@Override
public boolean accept(File file) {
return file.getName().contains("s");
}
};
简化1:隐去方法名和类型
FileFilter filter1=(File file)->{
return file.getName().contains("s");
};
简化2:省略参数类型
FileFilter filter2=(file)->{
return file.getName().contains("s");
};
简化3:省略"{}"
//如果方法体只有一句代码,方法体的"{}"可以忽略不写
//如果这句代码含有return关键字,那么忽略"{}"的同时也要一同忽略return
FileFilter filter4=(f)->f.getName().contains("s");
简化4:省略"()"
//如果只有一个参数"()"可以不写,如果方法是无参的"()"不能省略不写
FileFilter filter5=f->f.getName().contains("s");
2.FileFilter接口的简化小例
import java.io.File;
import java.io.FileFilter;
public class ListFilesDemo2 {
public static void main(String[] args) {
File dir=new File("./src/file");
/* FileFilter filter=new FileFilter(){
@Override
public boolean accept(File file) {
String name=file.getName();
return name.contains("t");
}
};*/
/*File[] subs = dir.listFiles(new FileFilter() {
@Override
public boolean accept(File file) {
return file.getName().contains("s");
}
});*/
File[] subs = dir.listFiles(f->f.getName().contains("s"));
if(dir.isDirectory()){
for (int i=0;i<subs.length;i++){
System.out.println(subs[i].getName());
}
}
}
}