1、简介:
使用Lambda表达式可以让我们写出更短、更易读的代码。它可以替代传统的匿名类,使代码更加简洁。Lambda表达式还支持函数式编程,这意味着我们可以将函数作为参数传递给其他方法,使得代码更加灵活和可扩展。
2、基本语法
(parameters) -> expression 或 (parameters) ->{ statements; }
Lambda表达式由三部分组成:
paramaters:类似方法中的形参列表,这里的参数是函数式接口里的参数。这里的参数类型可以明确的声明也可不声明而由JVM隐含的推断。另外当只有一个推断类型时可以省略掉圆括号。
->:可明白为“被用于”的意思
方法体:可以是表达式也可以代码块,是函数式接口里方法的实现。代码块可返回一个值或者什么都不反回,这里的代码块块等同于方法的方法体。如果是表达式,也可以返回一个值或者什么都不反回。
详细示例:- package langya.base.lambda;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- @FunctionalInterface
- interface OneParameterReturn {
- int test(int a);
- }
- @FunctionalInterface
- interface MoreParameterReturn {
- int test(int a, int b);
- }
- @FunctionalInterface
- interface NoParameterReturn {
- int test();
- }
- @FunctionalInterface
- interface OneParameterNoReturn {
- void test(int a);
- }
- @FunctionalInterface
- interface MoreParameterNoReturn {
- void test(int a, int b);
- }
- @FunctionalInterface
- interface NoParameterNoReturn {
- void test();
- }
- @FunctionalInterface
- interface MyFunction {
- void printValue();
- }
- public class Lambda {
- public void lambdaTest() {
- List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
- System.out.println("单个表达式的lambad");
- numbers.forEach(number -> System.out.println(number));
- List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8)) ;
- System.out.println("为了能够让 Lambda 和 Java 的集合类集更好的一起使用,集合当中,也新增了部分接口,以便与 Lambda 表达式对接。");
- System.out.println("原始list:"+list);
- list.removeIf(n -> n % 2 == 0);
- System.out.println("修改后list:"+list);
- System.out.println("多个语句的lambad");
- numbers.forEach(number -> {
- int dd = number * 2;
- System.out.println("number:" + number + " " + "dd:" + dd);
- });
- System.out.println("有返回值一个参数的函数式接口");
- OneParameterReturn oneParameterReturn = (int a) -> {
- System.out.println("有返回值有一个参数!");
- a = a * 2;
- return a;
- };
- int ret = oneParameterReturn.test(5);
- System.out.println(ret);
- System.out.println("有返回值多个参数的函数式接口");
- MoreParameterReturn moreParameterReturn = (int a, int b) -> {
- System.out.println("有返回值多个参数!");
- return a + b;
- };
- int ret2 = moreParameterReturn.test(5, 2);
- System.out.println("a+b=" + ret2);
- System.out.println("无参数无返回值");
- NoParameterReturn noParameterReturn = () -> {
- System.out.println("无参数无返回值");
- return 1;
- };
- int a = noParameterReturn.test();
- System.out.println("a:" + a);
- System.out.println("一个参数无返回值的函数式接口");
- OneParameterNoReturn oneParameterNoReturn = (int d) -> {
- System.out.println("一个参数无返回值的函数式接口,参数d的值为:" + d);
- };
- oneParameterNoReturn.test(20);
- System.out.println("多个参数无返回值的函数式接口");
- MoreParameterNoReturn moreParameterNoReturn = (int c, int b) -> {
- System.out.println("多个参数无返回值的函数式接口,参数c的值为:" + c + ",参数b的值为:" + b);
- };
- moreParameterNoReturn.test(1, 2);
- System.out.println("无参无返回值");
- NoParameterNoReturn noParameterNoReturn = () -> {
- System.out.println("无参无返回值");
- };
- noParameterNoReturn.test();
- System.out.println("匿名内部类变量捕获");
- final int x = 10;
- MyFunction myFunction = new MyFunction() {
- @Override
- public void printValue() {
- System.out.println("x:" + x);
- }
- };
- myFunction.printValue();
- }
- }
复制代码 运行结果为:- 单个表达式的lambad
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 为了能够让 Lambda 和 Java 的集合类集更好的一起使用,集合当中,也新增了部分接口,以便与 Lambda 表达式对接。
- 原始list:[1, 2, 3, 4, 5, 6, 7, 8]
- 修改后list:[1, 3, 5, 7]
- 多个语句的lambad
- number:1 dd:2
- number:2 dd:4
- number:3 dd:6
- number:4 dd:8
- number:5 dd:10
- number:6 dd:12
- number:7 dd:14
- number:8 dd:16
- 有返回值一个参数的函数式接口
- 有返回值有一个参数!
- 10
- 有返回值多个参数的函数式接口
- 有返回值多个参数!
- a+b=7
- 无参数无返回值
- 无参数无返回值
- a:1
- 一个参数无返回值的函数式接口
- 一个参数无返回值的函数式接口,参数d的值为:20
- 多个参数无返回值的函数式接口
- 多个参数无返回值的函数式接口,参数c的值为:1,参数b的值为:2
- 无参无返回值
- 无参无返回值
- 匿名内部类变量捕获
- x:10
复制代码 4、总结
Lambda 表达式的优点很明显,在代码层次上来说,使代码变得非常的简洁。缺点也很明显,代码不易读。
优点:
- 代码简洁,开辟迅速
- 方便函数式编程
- 非常容易进行并行盘算
- Java 引入 Lambda,改善了集合操纵
缺点:
- 代码可读性变差
- 在非并行盘算中,很多盘算未必有传统的 for 性能要高
- 不容易进行调试
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |