更多知识,请移步我的小破站:http://hellofriend.top
1. 个人理解
Lambda 表达式是一种简洁高效的实现匿名内部类的一种方式,可以使代码变得更清晰、更灵活,大大增加代码可读性。
2. 匿名内部类和Lambda表达式的比较
下面通过实际的例子,将匿名内部类与 Lambda 表达式进行比较,效果一目了然。
在 java8 之前使用匿名内部类是这样的:
public void Test3() {
List<Student> list = fitterStudent(students, new MyPredicate<Student>() {
@Override
public boolean judge(Student stu) {
return stu.getSex().equals("男");
}
});
}
可以看到真正有用的只有return stu.getSex().equals("男");
这一行代码,但是因为格式,确不得不把其他的好多行都写出来,毫无疑问这样的话,代码的可读性会大大降低。
下面来看一下使用Lambda表达式的效果:
public void Test2() {
List<Student> list = fitterStudent(students, (stu) -> stu.getSex().equals("男"));
}
看到效果了吧,原来的6行代码,现在只需要1行。是不是很厉害…
3. Lambda表达式的基本语法
java8中引入一个新的操作符->
,称为箭头操作符或者为 lambda 操作符。
箭头操作符将拉lambda表达式拆分成两个部分:
左侧:参数列表,所实现接口抽象方法的参数列表(函数式接口)
右侧:所需执行的功能,称为lambda体
lambda表达式需要"函数式接口"(接口中只有一个抽象方法)支持
可以使用注解@FunctionalInterface 帮忙检查是否是函数式接口
语法格式一: 无参数,无返回值
/**
* @Description 创建一个线程输出语句
* @Param []
* @return void
**/
@Test
public void test1() {
Runnable r0 = new Runnable() {
@Override
public void run() {
System.out.println("匿名内部类的方式:Hello Lambda!");
}
};
r0.run();
//语法格式一:无参数,无返回值
Runnable r1 = () -> System.out.println("Lambda表达式的方法:Hello Lambda!");