jdk8中,为了简化代码,减少不必要的代码,推出了Lambda表达式

变化过程演示

  1. 定义函数式接口

函数式接口:只有一个方法的接口,成为函数式接口。

只有函数式接口,才可以用Lambda实现

interface ILike{
    public void print();
}
  1. 实现类

首先按照最原始的写法,实现接口

class Like implements ILike{
    @Override
    public void print() {
        System.out.println("I Like lambda.");
    }
}

在Main方法中运行

public static void main(String[] args){
    ILike like = new Like();
    like.print();
}
  1. 静态内部类

有时候定义的类只会在一个类中使用,新建一个类会显得比较麻烦。于是可以将类放在类内部,便可以定义成静态内部类。

static class Like2 implements ILike{
    @Override
    public void print() {
        System.out.println("I Like lambda2.");
    }
}

在Main方法中运行

public static void main(String[] args){
    ILike like = new Like2();
    like.print();
}
  1. 局部内部类

有时候定义的类只会被使用一次,若全部都写成静态内部类,则会看起来比较凌乱、臃肿,代码不够优雅。于是便可以将类定义成局部内部类,卸载main方法或其他方法中

public static void main(String[] args) {
    //4. 局部内部类
    class Like3 implements ILike{
        @Override
        public void print() {
            System.out.println("I Like lambda3");
        }
    }
    ILike like = new Like3();
    like.print();
}
  1. 匿名内部类

相对与局部内部类可以做进一步的简化,写成匿名内部类。省略了class与类名,直接new 接口

public static void main(String[] args) {
    //5. 匿名内部类
    ILike like = new ILike() {
            @Override
            public void print() {
                System.out.println("I like lambda4,");
            }
        };
    like.print();
}
  1. Lambda表达式

在JDK8中,为了进一步简化,提供了lambda表达式进行简化。去掉了重复的内容,只保留了参数和方法体。

public static void main(String[] args) {
    //6. Lambda表达式
    ILike like = () -> {
        System.out.println("I like lambda5.");
    };
    like.print();
}

注意:Lambda表达式只保留了参数和方法体,而为了简化,方法体并未指明实现的是哪一个方法,所以Lambda表达式只能实现函数式接口

带参数写法

定义函数式接口

interface ILove{
    void love(int a);
}
  1. 用Lambda简化
public static void main(String[] args){
    ILove love = (int a) -> {
        System.out.println(a);
        //love = System.out::println;
    }
    love.love(3);
}
  1. 简化参数类型
public static void main(String[] args){
    ILove love = (a) -> {
        System.out.println(a);
    }
    love.love(4);
}

注意:多个参数也可以去掉参数类型,要去掉的话必须都去掉

  1. 简化括号
public static void main(String[] args){
    ILove love = a -> {
        System.out.println(a);
    }
    love.love(5);
}

注意:多个参数不可以去掉

  1. 简化花括号
public static void main(String[] args){
    ILove love = a -> System.out.println(a);
    love.love(6);
}

注意:花括号只有在方法体只有一条语句(比如这里的System.out.println(a);)时才可以被简化,当方法体中有多个语句时不可以被简化。