本篇目录
1、Lambda表达式是什么 2、Lambda表达式的语法 3、Lambda表达式的特点 4、Lambda表达式的简单使用 5、为什么使用Lambda表达式 6、方法引用 7、函数式接口
1 Lambda表达式是什么?
Lambda表达式是Java8中添加的一个新特性,允许把函数作为一个方法的参数,称为“函数式编程”。
举个例子
代码语言:javascript复制List<Integer> list=new ArrayList<>();
list.forEach(item->{
System.out.println(item);
});
上面代码中List将匿名函数 Lambda 的表达式作为 forEach() 方法的参数,实现了遍历集合的操作。
2 Lambda表达式的语法
一个最简单的lambda表达式如下:
代码语言:javascript复制Test test=()->{
System.out.println("我是方法体");
}
这段代码表示将实现一个接口的方法,()
表示参数,{}
表示方法体。
3 Lambda表达式特点
① 当参数只有一个时,()
可省略。
② 当方法体只有一句时,{}
可省略。
③ 当方法有返回值时,方法体只有一个返回语句时,return
关键字可以省略。
4 Lambda表达式的简单使用
定义一个接口
代码语言:javascript复制public interface TestInterface {
void test(String str);
}
使用Lambda表达式实现接口
代码语言:javascript复制public static void main(String[] args) {
TestInterface test=(a)->{
System.out.println(a);
};
test.test("测试");
}
5 为什么使用Lambda表达式
Lambda表达式允许把函数作为一个参数进行传递,使Lambda表达式可以写出更简洁的代码风格,以极少的代码使表达能力大大提升。
6 方法引用
当多个Lambda表达式是相同内容时,我们可以定义一个公共方法,通过方法引用来实现接口,可以避免代码重复。
在Lambda表达式简单使用的例子基础上,加入如下内容:
公共方法
代码语言:javascript复制public void test(String t){
System.out.println("我是公共方法,参数为:" t);
}
方法引用
代码语言:javascript复制Main m = new Main();
TestInterface test=m::test;
test.test("测试");
当目标方法是静态方法时,可以直接通过类名引用,如:
代码语言:javascript复制TestInterface test=Main::test;
当目标方法是构造方法时,还可以写做如下形式:
代码语言:javascript复制TestInterface test=Main::new;
7 函数式接口
在任意函数式接口上使用@FunctionalInterface注解来标识这个接口是一个函数式接口。
7.1 Java内置四大核心函数式接口
7.2 自定义函数式接口
创建一个函数式接口
代码语言:javascript复制@FunctionalInterface
public interface TestInterface<T> {
T test(String str);
}
创建一个方法,将函数式接口作为方法参数
代码语言:javascript复制public static String test(TestInterface<String> param){
return "测试函数式接口";
}
调用如上方法
代码语言:javascript复制String val=test(t->{
return t.toLowerCase();
});
System.out.println(val);