目录
一、Lambda 表达式的概念
二、Lambda 表达式的语法格式
三、Lambda 表达式的案例使用
1、使用 Lambda 来实现启动线程
2、使用 Lambda 表达式实现集合的排序
3、使用 Lambda 表达式实现文件夹下的文件查找
一、Lambda 表达式的概念
Lambda 表达式是特殊的匿名内部类, 它是把函数作为一个方法的参数(函数作为方法参数传递),将代码像数据 一样传递。
二、Lambda 表达式的语法格式
lambda 表达式分为三部分 : () -> {}
() 表示接口种方法的形参, 根据参数类型去匹配接口中的方法来进行方法的实现。
-> 表示 箭头操作符,分隔参数列表和方法体
{} 表示方法体
使用lambda表示的注意事项
1、形参的类型可以推断,所以可以省略
2、如果方法的参数只有一个,()可以省略
3、如果参数列表为空,必须要写上()、
4、如果方法体中只有一行代码,大括号、分号、可以省,
如果有返回return也可以省 。但是要一起省
5、lambda表达式不会生成 class 文件
三、Lambda 表达式的案例使用
1、使用 Lambda 来实现启动线程
//不使用 Lambda 表达式的写法new Thread(//以下是匿名内部类的实现new Runnable() {@Overridepublic void run() {System.out.println("匿名内部类启动线程。。。");}}).start();// 使用 Lambda 表达式进行简化new Thread(() -> {System.out.println("匿名内部类启动线程。。。");}).start();// 最简版,因为方法体中只有一行代码,可以省略掉大括号和语句后面的分号new Thread(() -> System.out.println("匿名内部类启动线程。。。")).start();
2、使用 Lambda 表达式实现集合的排序
List<Integer> list = new ArrayList<>();//不使用 Lambda 表达式的写法Collections.sort(list, new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {// 升序排列return o1 - o2;}});// 使用 Lambda 表达式进行简化Collections.sort(list, (Integer o1, Integer o2) -> {return o1 - o2;});/*最简版,因为形参的类型可以进行推断,所以形参类型可以省略,方法体中只有一行代码,可以省略掉大括号和语句后面的分号*/Collections.sort(list, (o1, o2) -> o1 - o2);
3、使用 Lambda 表达式实现文件夹下的文件查找
//指定文件夹File file = new File("D:\\bbb");if(!file.exists()){//如果文件夹不存在则进行创建file.mkdir();//给文件夹中添加新的文件,getAbsolutePath 通过绝对路径new File(file.getAbsolutePath()+"a.Java").createNewFile();//getPath 通过相对路径,创建文件new File(file.getPath()+"b.Java").createNewFile();}//查找文件夹中的符合要求的文件File[] files = file.listFiles(new FileFilter() {@Overridepublic boolean accept(File pathname) {return pathname.getName().endsWith(".Java");}});System.out.println(files.length);for (File f : files) {System.out.println(f.getName());}// 使用 Lambda 表达式进行简化file.listFiles((p) -> {return p.getName().endsWith(".Java");});//最简版,只有一个参数不需要 ()file.listFiles(p -> p.getName().endsWith(".Java"));