前言
之前一直对java8出的lamda表达式有些理解不清,不过现在算是了解得比较清楚了,在这里做个总结分享,希望能给予你帮助
一、lamda是什么?
Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。
JDK 也提供了大量的内置函数式接口供我们使用,使得 Lambda 表达式的运用更加方便、高效。
二、怎么用lamda
1.lamda基本用法
代码如下:
public class Test2 {
public static void main(String[] args) {
//1.简化参数类型,可以不写参数类型,但是必须所有参数都不写
NoReturnMultiParam lamdba1 = (a, b) -> {
System.out.println("简化参数类型");
};
lamdba1.method(1, 2);
//2.简化参数小括号,如果只有一个参数则可以省略参数小括号
NoReturnOneParam lambda2 = a -> {
System.out.println("简化参数小括号");
};
lambda2.method(1);
//3.简化方法体大括号,如果方法条只有一条语句,则可以胜率方法体大括号
NoReturnNoParam lambda3 = () -> System.out.println("简化方法体大括号");
lambda3.method();
//4.如果方法体只有一条语句,并且是 return 语句,则可以省略方法体大括号
ReturnOneParam lambda4 = a -> a+3;
System.out.println(lambda4.method(5));
ReturnMultiParam lambda5 = (a, b) -> a+b;
System.out.println(lambda5.method(1, 1));
}
}
2.用法示例
代码如下:
示例1 基础用法
public class Test1 {
public static void main(String[] args) {
ReturnOneParam l1 = a -> sheng(a);
System.out.println(l1.method(3));
//lambda2 引用了已经实现的 doubleNum 方法
ReturnOneParam l2 = Test1 ::sheng;
System.out.println(l2.method(3));
Test1 t1= new Test1 ();
//lambda4 引用了已经实现的 addTwo 方法
ReturnOneParam l4 = t1::add;
System.out.println(l4.method(2));
}
/**
* 要求
* 1.参数数量和类型要与接口中定义的一致
* 2.返回值类型要与接口中定义的一致
*/
public static int sheng(int a) {
return a * 2;
}
public int add(int a) {
return a + 2;
}
}
示例2 遍历集合
ArrayList<Integer> list = new ArrayList<>();
Collections.addAll(list, 1,2,3,4,5);
//lambda表达式 方法引用
list.forEach(System.out::println);
list.forEach(element -> {
if (element % 2 == 0) {
System.out.println(element);
}
});
总结
lamda表达式主要就是一个参数方法体得缩写表达,让代码看上去更整洁明了,其为了方便编写,提供了几个lamda基础上的简化省略形式,这对刚开始接触lamda的可能会搞混淆,不过我们记住他的本质就是一种缩写,没有括号的把它想成有括号的就行了