Lambda表达式


Lambda表达式的标准格式:

凡是根据上下文推导出来的内容,都可以省略书写。

可以省略的内容:

  1. (参数列表):括号中参数列表的数据类型,可以省略不写

  2. (参数列表):括号中的参数如果只有一个,那么类型和()都可以省略

  3. {一些代码}:如果{}中的代码只有一行,无论是否有返回值,都可以省略({},return,分号); 注意:要省略{},return,分号必须一起省略

由三部分组成:

  1. 一些参数

  2. 一个箭头

  3. 一段代码

格式:

(参数列表)——> {一些重写方法的代码};

解释说明格式

():接口中抽象方法的参数列表,没有参数,就空着;有参数就写出参数,多个参数使用逗号分隔

->:传递的意思,把参数传递给方法体{}

{}:重写接口的抽象的方法体

/*
需求:
给定一个厨子Cook接口,内含唯一的抽象方法makeFood,且无参数、无返回值
使用Lambda的标准格式调用invokeCook方法,打印输出“吃饭啦!”字样
*/
public interface Cook {
   public abstract void makeFood();
}
public class Demo {
   public static void main(String[] args) {
       //调用invokeCook方法,参数是Cook接口,传递Cook接口的匿名内部类对象
       invokeCook(new Cook() {
           @Override
           public void makeFood() {
               System.out.println("111");
          }
      });
       //使用Lambda表达式,简化匿名内部类的书写
       invokeCook(() ->{
           System.out.println("2");
      });
  }
   //定义一个方法,参数传递Cook接口,方法内部调用Cook接口中的方法makeFood
   public void invokeCook(Cook cook) {
       cook.makeFood();
  }
}
public class Demo {
   public static void main(String[] args) {
       Arrays.sort(arr,new Comparator<>() {
           public int compare(Person o1,Person o2) {
               return o1-o2;
          }
      });
       Arrays.sort(arr,(Person o1,Person o2) -> {
           return o1 - o2;
      });
  }
}
/*
给定一个计算器Calculator接口,内含抽象方法clac可以将两个int数字相加得到值
*/
public interface Calculator {
public abstract int calc(int a,int b);
}
public class Demo {
public static void main(String[] args) {
       invokeClac(120,130,(int a,int b) -> {
           return a + b;
      });
  }
   private static void invokeClac(int a,int b,Calaulator calaulator) {
       int result = calaulator.calc(a ,b);
       System.out.println("结果是"+result);
  }
}

Lambda的使用前提

  1. 使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法

  2. 使用Lambda必须具有上下文推断

备注:有且仅有一个抽象方法的接口,称为"函数式接口"

相关