1、Lambda表达式
Lambda 表达式是一种匿名函数(对 Java 而言这并不完全正确,但现在姑且这么认为),是JDK1.8新增特性,简单地说,它是没有声明的方法,也即没有访问修饰符、返回值声明和名字。
你可以将其想做一种速记,在你需要使用某个方法的地方写上它。当某个方法只使用一次,而且定义很简短,使用这种速记替代之尤其有效,这样,你就不必在类中费力写声明与方法了。
1.1基本方实现类法
首先看一下基础的实现类,一般定义接口与实现接口的三种方法(一般实现类,静态内部类,局部内部类)。
package SunLambda;
//对接口实现类进行调用。
public class Lambda_01 {
//静态内部类
static class ILike2 implements LambdaSun{
@Override
public void Lambda() {
System.out.println("学习Lambda让我快乐!2");
}
}
public static void main(String[] args) {
ILike iLike = new ILike();
iLike.Lambda();
ILike2 iLike2 = new ILike2();
iLike2.Lambda();
//局部内部类
class ILike3 implements LambdaSun{
@Override
public void Lambda() {
System.out.println("学习Lambda让我快乐!3");
}
}
ILike3 iLike3 = new ILike3();
iLike3.Lambda();
}
}
//定义接口
interface LambdaSun{
void Lambda();
}
//定义接口实现类
class ILike implements LambdaSun{
@Override
public void Lambda() {
System.out.println("学习Lambda让我快乐!");
}
}
为什么要用lambda?
使用lambda表达式可对一个接口进行简洁的实现。
lambda对接口的要求
要求接口中定义的必须实现的抽象方法只能有一个(必须要实现的,不是default修饰的)。
1.2lambda简化无参构造方法
package SunLambda;
public class Lambda_02 {
public static void main(String[] args) {
//匿名内部类,没有类的名称,必须借助接口或者是父亲
LambdaSun1 lambda = new LambdaSun1() {
@Override
public void Lambda() {
System.out.println("学习Lambda让我快乐!5");
}
};
lambda.Lambda();
//用Lambda方法进行简化
LambdaSun1 lambd = () ->{
System.out.println("学习Lambda让我快乐!6");
};
lambd.Lambda();
LambdaSun1 lambd1;
//用Lambda方法进行简化简化2
lambd1= ()-> System.out.println("学习Lambda让我快乐!7");
lambd1.Lambda();
}
}
//定义接口
interface LambdaSun1{
void Lambda();
}
Lambda实现接口,是有匿名内部类一步步实现的。
注:
1、Lambda表达式只有一行代码的情况下才能简化为一行,多行的话必须使用代码块(也就是{});
2、前提是接口是函数式接口;
3、接口多个参数类型可以去掉参数类型,要去掉都去掉,但必须加括号。
1.3Lambda简化有参数方法
package SunLambda;
public class Lambda_03 {
public static void main(String[] args) {
//匿名内部类
LambdaSun2 lambdasun = new LambdaSun2(){
@Override
public void lambda(int a,int b,int c) {
System.out.println(a+b+c);
}
};
lambdasun.lambda(1,1,1);
LambdaSun2 lambda;
//lambda简化1
lambda =(int a,int b,int c)->{
System.out.println(a+b+c);
};
lambdasun.lambda(2,2,2);
//lambda简化2
lambda =( a,b,c)->{
System.out.println(a+b+c);
};
lambdasun.lambda(3,3,3);
//lambda简化3
lambda=( a,b,c)-> System.out.println(a+b+c);
lambdasun.lambda(4,4,4);
}
}
interface LambdaSun2{
void lambda(int a,int b,int c);
}
注:接口多个参数类型可以去掉参数类型,要去掉都去掉,但必须加括号。
自学习于哔哩哔哩狂神说JAVA(侵删);
作为自己的笔记,欢迎大家斧正!