Lambda
表达式
JDK8
之后,java
支持了lambda
表达式这个特性.
Alt+回车
:是把可以简化的匿名内部类简化的快捷键
-
lambda
可以用更精简的代码创建匿名内部类.但是该匿名内部类实现的[接口只能有一个抽象方法],否则无法使用!前端技术中一般称它为"箭头函数" -
lambda
表达式是编译器认可的,最终会将其改为内部类编译到class
文件中,最终被编译器编到最原始的为代码 -
语法
(参数列表)->{ 方法体 }
-
最为原始的过滤器
获取当前项目目录下名字以"
.txt
"结束的所有子项public class ListFilesDemo2 { public static void main(String[] args) { File sub=new File("."); //过滤器 FileFilter filter=new FileFilter() { public boolean accept(File file) { String name=file.getName(); boolean b=name.endsWith(".txt"); return b; } }; File[] subs=sub.listFiles(filter); System.out.println(subs.length); for (File file:subs){ System.out.println(file.getName()); } } }
-
把
boolean
类型的放到return
后边由于
boolean
返回的true
或者false
与return
返回的true
或者false
是一致的public class ListFilesDemo2 { public static void main(String[] args) { File sub=new File("."); //过滤器 FileFilter f1=new FileFilter() { public boolean accept(File file) { return file.getName().endsWith(".txt"); } }; } }
-
使用->
删除方法名和大括号
FileFilter f2 = (File file)->{ return file.getName().endsWith(".txt"); };
-
参数的类型可以不写
FileFilter f3 = (file)->{ return file.getName().endsWith(".txt"); };
-
删除
return
如果方法体中**只有一句话代码,
name
方法体的"{}
"可以忽略不写,并且如果这句话有return
关键字,那么return
一同忽略**.FileFilter f4 = (file)->file.getName().endsWith(".txt");
-
删除"
()
"如果参数列表中只有一个参数,那么参数列表的"
()
"可以忽略不写FileFilter f5 = f->f.getName().endsWith(".txt");
**例子**🎍
获取当前目录下的所有名字以"
test
"开始的文件
-
原始
File dir = new File("."); dir.listFiles(new FileFilter() { public boolean accept(File file) { return file.getName().startsWith("test"); } });
-
简化
File dir = new File("."); dir.listFiles(f->f.getName().startsWith("test"));