1、Lambda
Lambda的語法目前僅對於只有一個抽象方法的接口。
在Lambda項目中,早期稱為SAM類型(SAM = single abstract method 單一抽象方法)。在jdk1.8中,叫函數接口(functional interface)。比如Runnable,Callable,Comparator。
lambda語法包含三部分:a、參數列表;b、箭頭符號“->”;c、代碼塊。
(arg1,arg2)->{Statement};
只有一個參數可以寫成:arg->{Statement};
代碼塊類似方法體,return語句將控制權交還給匿名方法(即Lambda表達式)的調用者。如果代碼塊只有一行,可以省略return關鍵字和{}括號。
1 import java.util.Comparator; 2 public class TestLambda { 3 public static void main(String[] args) { 4 Runnable r = ()->{System.out.println("hello world");}; 5 Comparator<String> c = (String s1,String s2)->s2.length()-s1.length(); 6 r.run(); 7 System.out.println(c.compare("s1", "12323")); 8 } 9 }
結果是:
1 hello world 2 3
我們也可以自定義函數接口
1 public class TestLambda { 2 interface testlambdainterface{ 3 public void me(String str); 4 } 5 public static void main(String[] args) { 6 testlambdainterface tli = (String s)->{System.out.println(s);}; 7 tli.me("hello world"); 8 } 9 }
2、Stream類
提供了只保存算法的一個類,是一個高版本的Iterator。
可以通過Collection.stream()方法產生,靜態方法LongStream.of(1,2,3,4)和自定義。