java8新增特性(一)---Lambda表示式
阿新 • • 發佈:2019-01-26
Lambda表示式也成為閉包,是java語言層次上的改變,Lambda允許把函式作為一個方法的引數(函式作為引數傳遞進方法中),或者把程式碼看成資料,函式式程式設計師對這一概念非常熟悉。在JVM平臺上有很多語言(groovy,scala等等)從一開始就有Lambda,但是程式設計師不得不使用匿名類來代替lambda。
看一下jdk7之前實現字串排序:
執行結果:package com.panther.dong.java8.lambda; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; /** * Created by panther on 15-8-22. */ public class Old { public static void main(String[] args) { List<String> nameList = Arrays.asList("panther","peter","lucy","jake"); Collections.sort(nameList, new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareTo(o2); } }); System.out.println(nameList); } }
只需要給靜態方法傳入一個List物件以及一個比較器來按制定順序排列,通常的方法是建立一個匿名的比較器物件然後將其傳遞給sort方法。
看一下java8怎麼用lambda實現上述功能:
package com.panther.dong.java8.lambda; import java.util.Arrays; import java.util.Collections; import java.util.List; /** * Created by panther on 15-8-22. */ public class New { public static void main(String[] args) { List<String> nameList = Arrays.asList("panther", "peter", "lucy", "jake"); //第一種寫法 Collections.sort(nameList, (String a, String b) -> { return b.compareTo(a); }); //第二種寫法 Collections.sort(nameList, (a, b) -> { return b.compareTo(a); }); //第三種寫法 Collections.sort(nameList, (a, b) -> b.compareTo(a)); nameList.forEach(e -> System.out.println(e)); } }
執行結果:
java編譯器可以自動推匯出引數型別,所以你可以不用再寫一次型別!!!!
看下面lambda的例子:
程式碼:
package com.panther.dong.java8.lambda; import java.util.Arrays; import java.util.List; /** * Created by panther on 15-8-22. */ public class LambdaTest { public static String separator = ","; public static void main(String[] args) { //Lambda可以把函式體放到一對花括號中,就像在java中定義普通函式那樣 System.out.println("-----Lambda Test1-----"); Arrays.asList("a", "b", "c", "d").forEach(e -> { System.out.println(e); }); //Lambda可以引用類的成員變數和區域性變數(如果變數不是final的話,它會被隱含的轉為final,這樣效率更高) System.out.println("--------Lambda Test2--------"); Arrays.asList("a", "b", "c", "d").forEach((String e) -> System.out.println(e + LambdaTest.separator)); System.out.println("--------Lambda Test3---------"); List<String> resultList = Arrays.asList("a", "c", "b", "d"); resultList.sort((e1, e2) -> { int result = e1.compareTo(e2); return result; }); resultList.forEach(e -> { System.out.println(e); }); } }
執行結果:
Lambda表示式介紹完畢!!!!~~~~~