Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以
传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更
灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了
提升。
1.举例(o1,o2) -> Integer.compare(o1,o2);
2.格式:
-> : Lambda操作符 或者 箭头操作符
-> 左边 : (o1,o2): Lambda 形参列表 所谓的形参列表是接口或者类中抽象方法的参数
-> 左边 : Lambda体 : 其实就是重写抽象方法的方法体
3.Lambda表达式的使用 : (分6种情况介绍)
4.Lambda表达式的本质 : 作为接口的实例
文章目录
语法一 : 无参,无返回值 (主要是看函数式接口中的方法内部的参数和返回值)
@Test
public void test1() {
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println( "欢欢好!" );
}
};
r1.run();
System.out.println( "----------------------------" );
// Lambda表达式
Runnable r2 = () -> System.out.println( "昊哥好!" );
r2.run();
}
语法二 : 有参(一个参数),无返回值 (主要是看函数式接口中的方法内部的参数和返回值)
@Test
public void test2(){
Consumer<String> com = new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
};
com.accept( "abc" );
System.out.println("--------------------------------");
// Lambda表达式
Consumer<String> com1 = (String str) -> {
System.out.println(str);
};
com1.accept( "bcd" );
}
语法三:数据类型可以省略,因为可由编辑器推断得出,称为"类型推断"
@Test
public void test3(){
Consumer<String> com = new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
};
com.accept( "sdt" );
System.out.println("------------------------");
//Lambda形式:
Consumer<String> com1 = (str) ->{
System.out.println(str);
};
com1.accept( "bzc" );
}
语法四 : Lambda只需要一个参数时,参数的小括号可以省略
@Test
public void test4(){
Consumer<String> com = new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
};
com.accept( "我是欢欢" );
System.out.println("------------------------");
//Lambda形式:
Consumer<String> com1 = str ->{
System.out.println(str);
};
com1.accept( "我是欢儿" );
}
语法五:Lambda 需要两个或以上的参数,多条执行语句,并可以有返回值
@Test
public void test5(){
Comparator<Integer> com = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
System.out.println(o1);
System.out.println(o2);
return o1.compareTo( o2 ); //比较大小
}
};
System.out.println(com.compare( 12,21 )); //-1
System.out.println("==========================");
//Lambda 表达式
Comparator<Integer> com1 = (o1,o2) ->{
System.out.println(o1);
System.out.println(o2);
return o1.compareTo( o2 );
};
System.out.println(com.compare( 12,12 )); //0
System.out.println("==========================");
}
语法六:当Lambda 体只有一条语句时,return 与 大括号若有,都可以省略
@Test
public void test7(){
//Lambda 表达式
Comparator<Integer> com1 = (o1,o2) -> {
System.out.println(o1);
System.out.println(o2);
return o1.compareTo( o2 );
};
System.out.println(com1.compare( 12,12 )); //0
System.out.println("==========================");
//含义是,返回值和大括号,都可以省略
Comparator<Integer> com2 = (o1,o2) -> o1.compareTo( o2 );
System.out.println(com2.compare( 12,12 )); //0
}
注意:Lambda表达式只支持函数式接口
总结:
->左边:lambda形参列表的参数类型可以省略(类型推断);如果lambda形参列表只有一个参数,其一对()也可以省略
->右边:lambda体应该使用一对{}包裹;如果lambda体只有一条执行语句(可能是return语句),省略这一对{}和return关键字