1.Lambda表达式的写法
a. 举例: (o1, o2) -> Integer.compare(o1, o2);
b. 格式:
-> : Lambda操作符 或 箭头操作符
->左边: 指定了Lambda表达式需要的参数列表
->右边: 指定了Lambda体,是抽象方法的实现逻辑, 也即Lambda表达式要执行的功能.
c. Lambda表达式的使用: (分为6种 情况介绍)
省略写法:
->左边: lambda形参列表的参数类型可以省略(类型推断); 如果只有一个参数,小括号()也可以省略
->右边: lambda体应该使用一对{}包裹; 但如果lambda体只有一条执行语句,{}也可以省略
d. Lambda表达式的本质: 作为函数式接口的实例
e. 如果一个接口中, 只声明了一个抽象方法, 则此接口就称为函数式接口
语法格式一: 无参, 无返回参数
public class LambdaTest {public static void test1() {//传统方式Runnable r1 = new Runnable() {@Overridepublic void run() {System.out.println("test1");}};r1.run();//--------------------------------------//Lambda方式Runnable r2 = () -> System.out.println("test1");r2.run();}}
语法格式二: Lambda需要一个参数,但是没有返回值
public static void test2(){
//传统方式
Consumer<String> con1 = new Consumer<String>(){
@Override
public void accept(String s){
System.out.println(s);
}
};
con1.accept("test2");
//--------------------------------------
//Lambda方式
Consumer<String> con2 = (String s) -> {
System.out.println(s);
};
con2.accept("test2");
}
语法格式三: 数据类型可以省略, 因为可由编译器推断得出, 称为”类型推断”
public static void test(){
//传统方式
Consumer<String> con1 = new Consumer<String>(){
@Override
public void accept(String s){
System.out.println(s);
}
};
con1.accept("test3");
//--------------------------------------
//Lambda方式
Consumer<String> con2 = (s) -> {
System.out.println(s);
};
ArrayList<String> list = new ArrayList<>();//类型推断
}
语法格式四: Lambda如果只需要一个参数时, 参数的小括号也可以省略
public static void test4(){
//传统方式
Consumer<String> con1 = new Consumer<String>(){
@Override
public void accept(String s){
System.out.println(s);
}
};
con1.accept("test2");
//--------------------------------------
//Lambda方式
Consumer<String> con2 = s -> {
System.out.println(s);
};
con2.accept("test2");
}
语法格式五: Lambda需要两个或以上的参数, 多条执行语句,并且可以有返回值
public static void test5() {
//传统方式
Comparator<Integer> com1 = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
System.out.println(o1);
System.out.println(o2);
return o1.compareTo(02);
}
};
System.out.println(com1.compare(11,22));
//-------------------------------
//Lambda方式
Comparator<Integer> com2 = (o1,o2) -> {
System.out.println(o1);
System.out.println(o2);
return o1.compareTo(o2);
};
System.out.println(com2.compare(11,22));
}
语法格式六: 当Lambda体只有一条语句时, return 与大括号都可以省略
public static void test6() {
//Lambda方式
Comparator<Integer> com1 = (o1,o2) -> {
System.out.println(o1);
System.out.println(o2);
return o1.compareTo(o2);
};
System.out.println(com1.compare(11,22));
//-------------------------------
//Lambda方式
Comparator<Integer> com2 = (o1,o2) -> o1.compareTo(o2);
System.out.println(com2.compare(11,22));
}
