lamda表达式

概述

Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。

Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

使用 Lambda 表达式可以使代码变的更加简洁紧凑。

意义:

  • 避免内部类定义过多

  • 使代码看起来更简洁

  • 去掉无意义代码,只保留核心部分

理解函数式接口是学习lamda表达式的关键所在,函数式定义的语法:

  • 任何接口如果只包含唯一一个抽象方法,那它就是一个函数式接口

    public interface Runable{

    ​ public abstract void run();

    }

  • 对于函数式接口,可以通过lamda表达式来创建接口对象。

语法

//1. 先定义一个函数式接口
interface Add{
  public abstract int add(int a,int b);
}
class LamdaDemo{
  public static void main(String[] args) {
      //2. lamda表达式
      Add r=(a,b)->{
          System.out.println(a+b);
          return a+b;
      };
      r.add(4,5);

  }
}

以下是lambda表达式的重要特征:

  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
  • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
  • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

注意:在 Lambda 表达式当中不允许声明一个与局部变量同名的参数或者局部变量。

实例

// 1. 不需要参数,返回值为 5  
() -> 5  

// 2. 接收一个参数(数字类型),返回其2倍的值  
x -> 2 * x  

// 3. 接受2个参数(数字),并返回他们的差值  
(x, y) -> x – y  

// 4. 接收2个int型整数,返回他们的和  
(int x, int y) -> x + y  

// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)  
(String s) -> System.out.print(s)
package erics;

//1. 定义一个函数式接口
interface ILike{ void lamda();}
//2. 实现类
class Like implements ILike{
@Override
public void lamda() {
  System.out.println("i like lamda1");
}
}
public class lamdaDemo1 {
//3. 静态内部类
static class Like2 implements ILike{
  @Override
  public void lamda() {
      System.out.println("i like lamda2");
  }
}
public static void main(String[] args) {
  ILike like = new Like();
  like.lamda();
  like=new Like2();
  like.lamda();

  //4. 局部内部类
 class Like3 implements ILike{
      @Override
      public void lamda() {
          System.out.println("i like lamda3");
      }
  }
 like=new Like3();
 like.lamda();

 //5. 匿名内部类,没有类名,必须借助接口或者父类
  like=new ILike() {
      @Override
      public void lamda() {
          System.out.println("i like lamda4");
      }
  };
  like.lamda();

  //6. 用lamda简化
  like=()->{
      System.out.println("i like lamda5");
  };
  like.lamda();

}
}

通过上述例子可以看出,lamda表达式省去了写内部类

posted @ 2021-07-29 16:19  Erics-C  阅读(75)  评论(0)    收藏  举报