Lambda表达式

Lambda表达式

表达式的基础语法

java8 中引入了新的操作符“-> ”,这个操作符称为箭头操作符,他的作用 是将Lambda表达式拆分成两部分:

左侧:Lambda 表达式的参数列表

右侧: Lambda 表达式中所需要执行的功能,也就是Lambda体

Lambda表达式需要接口去支持,且接口的抽象方法不能太多

语法格式

  1. 无参无返回值:()->System.out.println();或者

    () ->System.out.println(“hello”);`

    ​ 例如:

    ​ 一般写法:

    public void test1() {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                System.out.println("Hello");
            }
        };
        System.out.println("---------------");
        //调用
    	r.run();
    }
    

    Lambda表达式的写法

    public void test2() {
        Runnable r=() -> System.out.println("Hello Lambda!!!");
        r.run();
    }
    

    ​ 相比看起来确实很简单,不再需要去写出匿名内部类。而且调用的方法没有变化。

    1. 有一个参数,无返回值 (x)->System.out.println(x);

      int i =2;
      public void test3(){
          Consumer<String> con = new Consumer<String>() {
              @Override
              public void accept(String s) {
                  System.out.println(i);
              }
          };
      
      
          Consumer<String> con1 =(x) -> 			System.out.println(x);
          con.accept("1");
          con1.accept("1");
      }
      

    ​ 大家可以猜测一下输出的结果是什么呢?

    2

    1

    1. 有一个参数,一个返回值 x->System.out.println(x);小括号可以省略不写

      @Test
          public void test3(){
              /*Consumer<String> con = new Consumer<String>() {
                  @Override
                  public void accept(String s) {
                      System.out.println(i);
                  }
              };*/
              Consumer<String> con1 =x -> System.out.println(x);
              con1.accept("1");
              //con.accept("1");
          }
      
    2. 有两个以上的参数,并且Lambda体中有多个返回值。且Lambda体有多条语句==(x,y)->{语句1;语句2;};==

      public void test04(){
          Comparator<Integer> com = (x,y)->{
              System.out.println("函数式接口");
              return Integer.compare(x,y);
          };
      }
      

      1. 格式5:Lambda体只有一条语句,return 和大括号都可以不写
      public void test04(){
          Comparator<Integer> com = (x,y)-> Integer.compare(x,y);
          
      }
      
    3. 格式6:Lambda表达式的参数列表的数据类型可以省略不写 ,JVM编译器会自动判断数据类型


      总结

      1. 左右遇一括号省:左侧只有一个参数时候括号可以省略;右侧只有一条语句的时候大括号省。
      2. 左侧推断类型省:左侧可以通过上下文来推断出参数类型,因此可以省略。
      3. Lambda表达式需要“函数式接口”的支持。函数式接口:一个接口中只有一个抽象方法时,称为函数式接口。我们可以使用注解@FunctionInterface修饰来检查是否是函数式接口

    以上内容参考:任务学习 - 谷粒学院 - Java培训|大数据培训|前端培训|HTML5培训|Linux运维培训_程序员一站式IT在线学习平台 - Powered By EduSoho (gulixueyuan.com)

    存在不足,欢迎指出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值