java8新增特性(一)---Lambda表達式
阿新 • • 發佈:2017-06-17
使用 watermark 成員變量 arr mar .net [] size mark
執行結果:
執行結果:
執行結果:
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表達式介紹完成。!!!
~~~~~
java8新增特性(一)---Lambda表達式