import java.util.function.Consumer;
public class LambdaTest {
class Lambda implements LambdaTest1 {
@Override
public void println() {
System.out.println("正常的实现接口方法");
}
}
static class Lambda1 {
/**
* Lambda表达式在java中本质上是作为一个函数式接口的实现。
* 函数式接口:一个接口中有且只有一个抽象方法,称为函数式接口。
* 使用Lambda表达式必须是实现函数时接口
* Lambda表达式有六种情况分别如下
* */
/**
* 第一中情况,无参,无返回值的方法
*/
LambdaTest1 lamdaTest1 = () -> System.out.println("第一中情况,无参,无返回值的方法");
/**
* 第二中情况,有参,无返回值
*/
LambdaTest2 lamdaTest2 = (a, b) -> System.out.println(a + b);
/**
* 第三种给,类型推断:数据类型可以省略,由编译器推断得出---也就是方法中可以不写数据类型
*/
//正常写法
Consumer<String> lamdaTest3 = new Consumer<String>() {//此处的数据类型是由泛型
@Override
public void accept(String s) {
System.out.println(s);
}
};
// Lambda表达式写法
Consumer<String> lamdaTest3_1 = (s) -> System.out.println(s);
/**
* 第四种情况若只有一个参数的情况小括号可以省略
*/
Consumer<String> lamdaTest4 = s -> System.out.println(s);
/**
* 第五种情况Lambda可以有多个参数,方法体可以有多个执行语句,并且可以有返回值
*/
LambdaTest3 lamdaTest5 = (a, b) -> {
System.out.println("多个执行语句的lambda表达式带返回值的写法");
return (a + b);
};
/**
* 第六种情况当Lambda体只有一条执行语句时若有return和大括号都可以省略
*/
LambdaTest3 lamdaTest6 = (a, b) -> a + b;
}
public static void main(String[] args) {
Lambda1 lambda1 = new Lambda1();
lambda1.lamdaTest1.println();
System.out.println("********************************************");
lambda1.lamdaTest2.println1(11,22);
System.out.println("********************************************");
lambda1.lamdaTest3.accept("正常内部类操作方法");
System.out.println("********************************************");
lambda1.lamdaTest3_1.accept("Lambda表达式的操作方法");
System.out.println("********************************************");
lambda1.lamdaTest4.accept("省略小括号");
System.out.println("********************************************");
int i = lambda1.lamdaTest5.println1(22, 33);
System.out.println(i);
System.out.println("********************************************");
int x = lambda1.lamdaTest6.println1(33, 44);
System.out.println("省略return语句的方法 x = " + x);
System.out.println("");
System.out.println("");
System.out.println("================方法引用=====================");
}
}
抽象方法,注意:注解不是必须的,只要满足函数式接口的都能使用 Lambda表达式。该注解只是用来校验一下该接口是否是函数式接口。不满足函数的接口时idea会报错提示。
代码中的抽象方法定义基本和下列一致只是有没有返回值或参数的区别。
@FunctionalInterface//声明一个函数式接口时可以使用:@FunctionalInterface 注解,该注解只作为校验定义的接口是否是函数式接口
public interface LambdaTest1 {
public void println ();
}
该文章为本人学习Lambda表达式的的一个笔记,不足支出欢迎大佬指正。