Java8新特性:Lambda表达式 基本语法


Lambda表达式的基本语法:

Java8引入了一个新的操作符   ‘ -> ’ 

把Lambda表达式拆分成两部分。

左侧:参数列表

右侧:执行的功能,即 Lambda 体

Lambda 表达式 需要函数式接口的支持

语法格式一:无参数,无返回值的方法

() ->  System.out.println("Hello Lambda!");
package Test;

public class Main {

    public static void main(String[] args) {
    int num = 0;
    //匿名内部类访问同级别的变量的时候,
    //jdk1.7以前必须是final,现在1.8也是final,但是不用写,如果做++就会报错
        Runnable r1 = new Runnable() {
            @Override
            public void run() {
                System.out.println("Hello" + num);
            }
        };
        r1.run();
        
        System.out.println("===================");
        Runnable r2 = () -> System.out.println("Hello");
        r2.run();
    }
}

 语法格式二:有一个参数,并且无返回值

(x) -> System.out.println(x);
  public static void main(String[] args) {
        Consumer consumer = (x)-> System.out.println(x);
        consumer.accept("wyw又来学习来了");
    }

 语法格式三:如果只有一个参数,参数的小括号可以省略不写

x -> System.out.println(x);

 语法格式四:有两个以上的参数,有返回值,并且Lambda体中有多条语句,要用大括号!

public class Main {

    public static void main(String[] args) {
        Comparator comparator = (x,y) -> {
            System.out.println("111111111");
            System.out.println("222222222");
            return Integer.compare(x,y);
        };
    }
}

 语法格式五:如果Lambda体重只有一条语句,return和大括号都可以省略

Comparator comparator = (x,y) -> Integer.compare(x,y);

语法格式六:参数列表的数据类型可以不写,但是如果写就要全部写。(因为JVM编译器可以通过上下文推断出数据类型。)

Comparator comparator = (Integer x,Integer y) -> Integer.compare(x,y);

总结一下呢就是:

上联:左右遇一括号省

下联:左侧推断类型省

横:能省则省

右侧有一个语句的话,return也可以省。

!!!Lambda表达式需要“函数式接口”的支持

函数式接口:接口中只有一个抽象方法的接口,成为函数式接口。可以使用

@FunctionalInterface

修饰,可以检查这个接口是否是函数式接口。