Lambda表达式

什么是lambda表达式?Lambda表达式,也可以称为闭包,它是推动Java8发布的最重要的新特新;其实呢,lambda表达式实质上是一个匿名方法,但该方法并非独立执行,而是用于实现函数式接口定义的唯一抽象方法,在使用lambda表达式时,会创建一个实现了函数式接口的一个匿名类实例,可以将lambda表达式视为一个对象,可以将其作为参数传递;

为什么要使用lambda表达式?

  • 可以避免匿名内部类定义过多

  • 可以让你的代码看起来很简洁

  • 去掉了一堆没有意义的代码,只留下核心的逻辑

何为函数式接口?

  • 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数时接口,例如:线程中的Runnable接口

  • 对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。

下面来推导一下lambda表达式;

package com.hp.lambda;
 ​
 /**
  * @author: 金州拉文
  * @date 2021/1/27 11:53
  **/
 //lambda表达式推导
 public class TestLambda1 {
     //3.静态外部类
     static class Like2 implements ILike{
         @Override
         public void lambda() {
             System.out.println("i like lambda-->2");
         }
     }
     public static void main(String[] args) {
         ILike like = new Like();
         like.lambda();
         like = new Like2();
         like.lambda();
         
         //4.局部内部类
         class Like3 implements ILike{
             @Override
             public void lambda() {
                 System.out.println("i like lambda-->3");
             }
         }
         like = new Like3();
         like.lambda();
 ​
         //5,匿名内部类,没有类的名称,必须借助接口或者父类
         like = new ILike(){
             @Override
             public void lambda() {
                 System.out.println("i like lambda-->4");
             }
         };
         like.lambda();
         //6.lambda简化
         like=()->{
             System.out.println("i like lambda-->5");
         };
         like.lambda();
     }
 }
 //1.定义一个函数式接口
 interface ILike{
     void lambda();
 }
 //2.实现类
 class Like implements ILike{
     @Override
     public void lambda() {
         System.out.println("i like lambda-->1");
     }
 }

运行结果:

Lambda表达式

下面来简化一下lambda表达式

 package com.hp.lambda;
 ​
 /**
  * @author: 金州拉文
  * @date 2021/1/27 12:11
  **/
 //lambda表达式简化
 public class TestLambda2 {
     public static void main(String[] args) {
         //1.lambda表达式简化
         ILove love=(int a)->{
             System.out.println("i love you-->"+a);
         };
         love.lambda(1);
         //2.简化参数
         love=(a)->{
             System.out.println("i love you-->"+a);
         };
         love.lambda(2);
         //3.简化括号
         love=a -> {
             System.out.println("i love you-->"+a);
             System.out.println("i love you-->too");
         };
         love.lambda(3);
         //4.去掉花括号
         love=a -> System.out.println("i love you-->"+a);
         love.lambda(4);
         /*
         * love=(a,b) -> System.out.println("i love you-->"+a+b);
         love.lambda(4,4);*/
     }
 }
 interface ILove{
     void lambda(int a);
     //void lambda(int a,int b);
 }
 class Love implements ILove{
     @Override
     public void lambda(int a) {
         System.out.println("i love you-->"+a);
     }
 }

运行结果:

Lambda表达式

总结:

  • lambda表达式只能由一行代码的情况下才能简化成为一行,如果有多行,那么就用代码块包裹

  • 前提是接口为函数式接口

  • 多个参数也可以去掉参数类型,但是要统一,如果去掉就都去掉,必须要加上括号

上一篇:[CS224N] Note2


下一篇:shell正则表达式RE