Lambda表達式的基本語法
java8中引入一個新的操作符“->”,該操作符稱爲箭頭操作符或Lambda操作符。
操作符將Lambda表達式拆分爲左右兩部分:
左側:Lambda表達式的參數列表
右側:Lambda表達式中所需執行的功能,稱爲Lambda體
語法格式一:無參數,無返回值
() -> System.out.println("Hello e路縱橫開發團隊");
@Test
public void test1(){
int num = 0;
//匿名內部類
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("Hello World!" + num);//在匿名內部類中應用了同級別的變量時,在jdk1.7以前,變量必須申明爲final,在jdk1.8中,默認加上final
}
};
r.run();
System.out.println("---------------------------------------");
//Lambda表達式
Runnable r1 = () -> System.out.println("Hello e路縱橫開發團隊" + num);
r1.run();
}
語法格式二:有一個參數,無返回值
(x) -> System.out.prinrln(x);
@Test
public void test2(){
Consumer<String> consumer = (x) -> System.out.println(x);
consumer.accept("e路縱橫");
}
語法格式三:若只有一個參數,小括號可以省略不寫
x -> System.out.println(x);
@Test
public void test3(){
Consumer<String> consumer = x -> System.out.println(x);
consumer.accept("e路縱橫");
}
語法格式四:有兩個以上的參數,有返回值,並且Lambda體中有多條語句
Comparator<Integer> comparator = (x, y) -> {
System.out.println("函數式接口");
return Integer.compare(x, y);
}
@Test
public void test4(){
Comparator<Integer> comparator = (x, y) -> {
System.out.println("函數式接口");
return Integer.compare(x, y);
};
}
語法格式五:若Lambda體中只有一條語句,return和大括號都可以省略不寫
Comparator<Integer> comparator = (x, y) -> Integer.compare(x, y);
@Test
public void test5(){
Comparator<Integer> comparator = (x, y) -> Integer.compare(x, y);
}
語法格式六:Lambda表達式的參數列表的數據類型可以省略不寫,因爲JVM編譯器可以通過上下文推斷出數據類型,即“類型推斷”。
(Integer x, Integer y) -> Integer.compare(x, y); 其中Integer可以省略不寫
Lambda表達式需要“函數式接口”的支持
函數式接口:接口中只有一個抽象方法的接口,稱爲函數式接口。可以使用註解@FunctionInterface修飾,可以檢查接口是否是函數式接口
@FunctionalInterface
public interface MyFun<T> {
public Integer getValue(Integer num);
}