Lambda表达式的六种用法
程序员文章站
2024-01-07 22:12:04
文章目录为什么使用Lambda表达式Lambda表达式的本质使用Lambda表达式的条件语法格式代码举例总结为什么使用Lambda表达式 Lambda是–个匿名函数,我们可以把Lambda表达式理解为是–段可以传递的代码(将代码像数据一样进行传递) 。使用它可以写出更简洁、更灵活的代码。作为-种更紧凑的代码风格,使Java的语 言表达能力得到了提升。Lambda表达式的本质 作为接口的实例使用Lambda表达式的条件JDK版本必须1.8以上接口只能有一个方法语法格式(0...
为什么使用Lambda表达式
Lambda是–个匿名函数,我们可以把Lambda表达式理解为是–段可以传递的代码(将代码像数据一样进行传递) 。使用它可以写出更简洁、更灵活的代码。作为-种更紧凑的代码风格,使Java的语 言表达能力得到了提升。
Lambda表达式的本质
作为接口的实例
使用Lambda表达式的条件
- JDK版本必须1.8以上
- 接口只能有一个方法
语法格式
(01,02) ->Integer. compare(01,02);
-> :lambda操作符或箭头操作符
->左边: lambda形参列表(其实就是 接口中的抽象方法的形参列表)
->右边: Lambda体 (其实就是重写的抽象方法的方法体)
代码举例
package PackageTest01;
import java.net.SocketOption;
import java.util.Comparator;
import java.util.function.Consumer;
/**
* LambdaTest表达式的使用
* 共六种语法格式
*/
public class LambdaTest {
public static void main(String[] args) {
test5();
}
//语法格式一:无参,无返回值
public static void test1(){
Runnable r1 = new Runnable(){
@Override
public void run() {
System.out.println("练习Lambda表达式的使用");
}
};
r1.run();
System.out.println("*************************");
Runnable r2 = ()->System.out.println("练习Lambda表达式的使用2");
r2.run();
}
//语法格式二:Lambda 需要一个参数,但是没有返回值
public static void test2(){
Consumer<String> con = new Consumer<String>(){
@Override
public void accept(String s) {
System.out.println(s);
}
};
con.accept("谎言和誓言的区别是什么?");
Consumer<String> con2 = (String s)->{
System.out.println(s);
};
con.accept("一个是听的人当真了,一个是说的人当真了");
}
//语法格式三:数据类型可以省略,因为可由编辑器推断出,称为“类型推断”
public static void test3(){
Consumer<String> con1 = (String s)->{
System.out.println(s);
};
con1.accept("一个是听的人当真了,一个是说的人当真了");
System.out.println("**********************");
Consumer<String> con2 = (String s)->{
System.out.println(s);
};
con2.accept("一个是听的人当真了,一个是说的人当真了");
}
//语法格式四:Lambda 如只需要一个参数时,参数的小括号可以省略
public static void test4(){
Consumer<String> con1 = (s)->{
System.out.println(s);
};
con1.accept("一个是听的人当真了,一个是说的人当真了");
Consumer<String> con2 = s->{
System.out.println(s);
};
con2.accept("一个是听的人当真了,一个是说的人当真了");
}
//语法格式五: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(o2);
}
};
System.out.println(com1.compare(12,6));
System.out.println("*********************");
Comparator<Integer> com2 = (o1, o2)-> {
System.out.println(o1);
System.out.println(o2);
return o1.compareTo(o2);
};
System.out.println(com2.compare(23, 56));
}
//语法格式六:当Lambda体只有一条语句时,return与大括号可以一起省略(省略大括号时,return关键字也必须省略)
public static void test6(){
Comparator<Integer> com1 = (o1, o2)-> {
return o1.compareTo(o2);
};
System.out.println(com1.compare(23, 56));
Comparator<Integer> com2 = (o1, o2)-> o1.compareTo(o2);
System.out.println(com2.compare(23, 56));
}
}
总结
- ->左边: lambda形参列表的参数类型可以省略(类型推断);如果Lambda形参列表只有一一个参数,其括号可以省略。
- ->右边: lambda体应该使用一对{} 包裹;如果Lambda体只有一条执行语句(可能是return语句),则可以将return关键字与大括号可以一起省略(省略大括号时,return关键字也必须省略)
本文地址:https://blog.csdn.net/HC199854/article/details/107671960