1.前言
- 对lambda表达式的个人理解:是由匿名内部类演变而来的一种更加简洁、更灵活的一种代码编写方式,其中最主要的改变了匿名内部类中实现接口中方法的形式。
1.1.匿名内部类和Lambda表达式的比较
#匿名内部类的形式
@Test
public void test01(){
//匿名内部类
Comparator<Integer> comparator = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(o1,o2);
}
@Override
public boolean equals(Object obj) {
return false;
}
};
//调用
TreeSet<Integer> set = new TreeSet<>(comparator);
}
#Lambda表达式的形式
@Test
public void test02(){
// Lambda 表达式
Comparator<Integer> comparator = (a, b) -> Integer.compare(a, b);
//调用
TreeSet<Integer> set = new TreeSet<>(comparator);
}
2 使用Lambda表达式的前提条件
- 函数式接口:接口中只有一个抽象方法的接口 @FunctionalIterface
3.语法介绍
3.1.基本语法
- 操作符:->
- 左侧:参数列表
- 右侧:执行代码块 / Lambda 体
3.2.不同情况下的语法应用
- 无参数,无返回值:() -> sout
#例如Runnable接口:
public class Test02 {
int num = 10; //jdk 1.7以前 必须final修饰
#匿名内部类中的形式
@Test
public void test01(){
//匿名内部类
new Runnable() {
@Override
public void run() {
//在局部类中引用同级局部变量
//只读
System.out.println("Hello World" + num);
}
};
}
#Lambda表达式中的形式
@Test
public void test02(){
//语法糖
Runnable runnable = () -> {
System.out.println("Hello Lambda");
};
}
}
- 有一个参数,无返回值 (小括号可以省略不写)
@Test
public void test03(){
Consumer<String> consumer = (a) -> System.out.println(a);
//还可以这样写
// Consumer<String> consumer = a -> System.out.println(a);
consumer.accept("我觉得还行!");
}
- 有两个及以上的参数,有返回值,并且 Lambda 体中有多条语句
@Test
public void test04(){
Comparator<Integer> comparator = (a, b) -> {
System.out.println("比较接口");
return Integer.compare(a, b);
};
}
- 有两个及以上的参数,有返回值,并且 Lambda 体中只有1条语句 (大括号 与 return 都可以省略不写)
@Test
public void test04(){
Comparator<Integer> comparator = (a, b) -> Integer.compare(a, b);
}
4 jdk8中可以使用lambda表达式的接口
java.lang.Runnable
java.util.concurrent.Callable
java.security.PrivilegedAction
java.util.Comparator
java.io.FileFilter
java.nio.file.PathMatcher
java.lang.reflect.InvocationHandler
java.beans.PropertyChangeListener
java.awt.event.ActionListener
javax.swing.event.ChangeListener
本文深入解析了Java 8中引入的Lambda表达式,对比了其与匿名内部类的区别,介绍了Lambda表达式的使用前提和语法,并列举了多个示例,包括不同参数和返回值情况下的Lambda表达式写法。
528

被折叠的 条评论
为什么被折叠?



