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) { Consumerconsumer = (x)-> System.out.println(x); consumer.accept("wyw又来学习来了"); }
语法格式三:如果只有一个参数,参数的小括号可以省略不写
x -> System.out.println(x);
语法格式四:有两个以上的参数,有返回值,并且Lambda体中有多条语句,要用大括号!
public class Main { public static void main(String[] args) { Comparatorcomparator = (x,y) -> { System.out.println("111111111"); System.out.println("222222222"); return Integer.compare(x,y); }; } }
语法格式五:如果Lambda体重只有一条语句,return和大括号都可以省略
Comparatorcomparator = (x,y) -> Integer.compare(x,y);
语法格式六:参数列表的数据类型可以不写,但是如果写就要全部写。(因为JVM编译器可以通过上下文推断出数据类型。)
Comparatorcomparator = (Integer x,Integer y) -> Integer.compare(x,y);
总结一下呢就是:
上联:左右遇一括号省
下联:左侧推断类型省
横:能省则省
右侧有一个语句的话,return也可以省。
!!!Lambda表达式需要“函数式接口”的支持
函数式接口:接口中只有一个抽象方法的接口,成为函数式接口。可以使用
@FunctionalInterface
修饰,可以检查这个接口是否是函数式接口。