Java8_表达式语法

语法

Lambda 表达式在Java 语言中引入了一个新的语法元 素和操作符。这个操作符为 “->” , 该操作符被称 为 Lambda 操作符或剪头操作符。它将 Lambda 分为 两个部分:

左侧:指定了 Lambda 表达式需要的所有参数
右侧:指定了 Lambda 体,即 Lambda 表达式要执行 的功能。

语法格式

语法格式一:无参,无返回值,Lambda体只需一条语句

旧写法:
 Runnable runnable = new Runnable() {
            int num = 0; //jdk 1.7 前,必须是 final

            @Override
            public void run() {
                System.out.println("Hello world " + num);
            }
        };
runnable.run();

lamda表达式:
Runnabler1=()->System.out.println("Hel1o Lambda!");

语法格式二:Lambda需要一个参数

Consumer<String>fun=(args)->System.out.println(args);

语法格式三:Lambda只需要一个参数时,参数的小括号可以省略

Consumer<String>fun=args->System.out.printin(args);

语法格式四:Lambda需要两个参数,并且有返回值

BinaryOperator<Long>bo=(x,y)->{
System.out.print1n("实现函数接口方法!");
return x+y;
};

语法格式五:当Lambda体只有一条语句时,return与大括号可以省略

BinaryOperator<Long>bo=(x,y)->x+y;

语法格式六:数据类型可以省略,因为可由编称为“类型推断”

BinaryOperator<Long>bo=(Longlx,|Longly)->{
System.out.print1n("实现函敷接口方法!);
returnx+y;
}

类型推断

上述 Lambda 表达式中的参数类型都是由编译器推断 得出的。Lambda 表达式中无需指定类型,程序依然可 以编译,这是因为 javac 根据程序的上下文,在后台 推断出了参数的类型。Lambda 表达式的类型依赖于上 下文环境,是由编译器推断出来的。这就是所谓的 “类型推断”

Predicate<Integer> atLeast5 = x -> x > 5;

依据Predicate自动推断x的类型为Integer,并且表达式的返回值为boolean

** 反例 **

BinaryOperator add = (x, y) -> x + y;

编译报错,因为无法推断xy的类型,则认定xy类型为Object,而Object类型不支持+操作符

原文地址:https://www.cnblogs.com/junzifeng/p/12743033.html