• Lambda表达式


    Lambda表达式介绍

            Lambda表达式会让代码更加简洁,它本质上就是一个匿名函数,可以代替匿名内部类来实现接口,是基于数学中的λ演算得名,也可称为闭包(Closure)。当开发者在编写Lambda表达式时,会随之被编译成一个函数式接口

    函数式接口 

    定义一个接口有且只有一个抽象方法
    注意1、如果只有一个接口只有一个抽象方法,那么该接口就是一个函数式接口
    2、如果我们在某个接口上声明了@FunctionalInterface注解,那么编译器就会按照函数式接口的定义来要求该接口,这样如果有两个抽象方法,程序就会报错。
    3、从某种意义上来说,只要你保证你的接口 中只有一个抽象方法,你可以不加这个注解。加上就会自动进行检测的

    Lambda表达式语法

    描述Lambda表达式函数,只有参数列表和方法体;
    (        参数列表        )  →  {       方法体        }   举例:( int a  )  →  { System.out.println(a); }   
    ()用来表示参数列表;
    参数列表类似方法中的形参列表,这里的参数是函数式接口里的参数;
    {}用来描述方法体;
    方法体可以是表达式也可以代码块,是函数式接口里方法的实现。代码块可返回一个值或者什么都不返回,这里的代码块块等同于方法的方法体。如果是表达式,也可以返回一个值或者什么都不返回
    Lambda运算符,可以叫做箭头符号,或者goes to

    Lambda表达式举例

    1. public class LambdaMain {
    2. public static void main(String[] args) {
    3. // 举例 1 :无参数 无返回值 接口方法
    4. LambdaNoParameters noParameters = () -> {
    5. System.out.println("无参数 无返回值 接口方法");
    6. } ;
    7. noParameters.methodNoParameters();
    8. // 举例 2 :单个参数 无返回值 接口方法
    9. LambdaSingleParameter singleParameter = (int param) -> {
    10. System.out.println("单个参数:"+param+" 无返回值 接口方法");
    11. } ;
    12. singleParameter.methodSingleParameter(22);
    13. // 举例 3 :多个参数 无返回值 接口方法
    14. LambdaMultipleParameters multipleParameters = (int param1,String param2) -> {
    15. System.out.println("多个参数:"+param1+param2+" 无返回值 接口方法");
    16. };
    17. multipleParameters.methodMultipleParameters(22,"33");
    18. // 举例 3 :多个参数 有返回值 接口方法
    19. LambdaExistenceReturn existenceReturn = (int param1,String param2) -> {
    20. return "参数返回:"+param1+param2;
    21. };
    22. System.out.println(existenceReturn.methodExistenceReturn(22, "44"));
    23. }
    24. }
    25. interface LambdaNoParameters{
    26. //无参数 无返回值 接口方法
    27. void methodNoParameters();
    28. }
    29. interface LambdaSingleParameter{
    30. //单个参数 无返回值 接口方法
    31. void methodSingleParameter(int param);
    32. }
    33. interface LambdaMultipleParameters{
    34. //有参数 无返回值 接口方法
    35. void methodMultipleParameters(int param1,String param2);
    36. }
    37. interface LambdaExistenceReturn{
    38. //有参数 有返回值 接口方法
    39. String methodExistenceReturn(int param1,String param2);
    40. }

    语法精简

    1、参数类型可以省略
    2、假如只有一个参数,()括号可以省略
    3、如果方法体只有一条语句,{}大括号可以省略
    4、如果方法体中唯一的语句是return返回语句,那省略大括号的同时return也要省略
    1. public class LambdaMain {
    2. public static void main(String[] args) {
    3. // 举例 1 :无参数 无返回值 接口方法
    4. LambdaNoParameters noParameters = () -> {
    5. System.out.println("无参数 无返回值 接口方法");
    6. } ;
    7. //精简
    8. noParameters = () -> System.out.println("无参数 无返回值 接口方法");
    9. noParameters.methodNoParameters();
    10. // 举例 2 :单个参数 无返回值 接口方法
    11. LambdaSingleParameter singleParameter = (int param) -> {
    12. System.out.println("单个参数:"+param+" 无返回值 接口方法");
    13. } ;
    14. //精简
    15. singleParameter = (param)-> System.out.println("单个参数:"+param+" 无返回值 接口方法");
    16. singleParameter.methodSingleParameter(22);
    17. // 举例 3 :多个参数 无返回值 接口方法
    18. LambdaMultipleParameters multipleParameters = (int param1,String param2) -> {
    19. System.out.println("多个参数:"+param1+param2+" 无返回值 接口方法");
    20. };
    21. //精简
    22. multipleParameters = (param1,param2) -> System.out.println("多个参数:"+param1+param2+" 无返回值 接口方法");
    23. multipleParameters.methodMultipleParameters(22,"33");
    24. // 举例 3 :多个参数 有返回值 接口方法
    25. LambdaExistenceReturn existenceReturn = (int param1,String param2) -> {
    26. return "参数返回:"+param1+param2;
    27. };
    28. //精简
    29. existenceReturn = (param1,param2) -> "参数返回:"+param1+param2 ;
    30. System.out.println(existenceReturn.methodExistenceReturn(22, "44"));
    31. }
    32. }
    33. interface LambdaNoParameters{
    34. //无参数 无返回值 接口方法
    35. void methodNoParameters();
    36. }
    37. interface LambdaSingleParameter{
    38. //单个参数 无返回值 接口方法
    39. void methodSingleParameter(int param);
    40. }
    41. interface LambdaMultipleParameters{
    42. //有参数 无返回值 接口方法
    43. void methodMultipleParameters(int param1,String param2);
    44. }
    45. interface LambdaExistenceReturn{
    46. //有参数 有返回值 接口方法
    47. String methodExistenceReturn(int param1,String param2);
    48. }

    方法引用及参数捕获

    方法引用如果存在多个相同的Lambda表达式实现函数,我们可以封装成通用方法,以便于维护
    方法引用语法对象::方法 (如果是静态方法,可以直接:类名::方法)
    1. import java.math.BigDecimal;
    2. public class LambdaMain {
    3. public static void main(String[] args) {
    4. BigDecimal sum = BigDecimal.ZERO;
    5. BigDecimal abc = new BigDecimal("666");
    6. LambdaMain lambdaMain = new LambdaMain();
    7. LambdaSumParameters sumParameters = null;
    8. // 数据捕获 abc
    9. sumParameters = (abcd, efgh)->abc.add(efgh);
    10. sum = sumParameters.methodNoParameters(new BigDecimal("444.444"), BigDecimal.TEN);
    11. System.out.println(sum); // 666 + 10
    12. // 调用实例方法
    13. sumParameters = lambdaMain::sum ;
    14. sum = sumParameters.methodNoParameters(new BigDecimal("333.333"), BigDecimal.TEN);
    15. System.out.println(sum);
    16. // 通过类名调用静态实例方法
    17. sumParameters = LambdaMain::staticSum;
    18. sum = sumParameters.methodNoParameters(new BigDecimal("444.444"), BigDecimal.TEN);
    19. System.out.println(sum);
    20. // 通过类名调用静态实例方法
    21. sumParameters = BigDecimal::add;
    22. sum = sumParameters.methodNoParameters(new BigDecimal("444.444"), BigDecimal.TEN);
    23. System.out.println(sum);
    24. }
    25. //定义通用求和函数
    26. BigDecimal sum(BigDecimal param1,BigDecimal param2){
    27. return param1.add(param2);
    28. }
    29. //定义静态通用求和函数
    30. static BigDecimal staticSum(BigDecimal param1,BigDecimal param2){
    31. return param1.add(param2);
    32. }
    33. }
    34. interface LambdaSumParameters{
    35. //无参数 无返回值 接口方法
    36. BigDecimal methodNoParameters(BigDecimal a,BigDecimal b);
    37. }

     

     

  • 相关阅读:
    Windows环境下Hadoop/Hbase环境的配置
    [Redis] redis-cli 命令总结
    5.Array扩展
    【ISP】噪声--sensor(2)
    勒索病毒最新变种.halo勒索病毒来袭,如何恢复受感染的数据?
    PHP如何批量修改二维数组中值
    Http和Https
    介绍 Django 的模型字段 DecimalField
    nestjs编程-nestjs装饰器
    vs code调试rust乱码问题解决方案
  • 原文地址:https://blog.csdn.net/qq_40728285/article/details/126227829