Lambda表達式是java8的新特性,支持代碼塊做爲方法參數,至關於Lambda表達式代替匿名內部類建立對象Lambda代碼塊將會代替實現抽象方法的方法體,lambda表達式就至關於一個匿名的方法。html
1.Lambda表達式的語法:(形參列表)_>{ 代碼塊};行參列表容許省略修飾符,若是隻有一個形參,也能夠省略括號;箭頭,必須經過英文中的下劃線和大於號組成;代碼塊 ,若是隻有一條能夠不用寫花括號,只有一條return返回語句,能夠省略return。html5
import java.util.Arrays; import java.util.List; public class Demo06 { public static void main(String[] args) { // TODO Auto-generated method stub String[] s = { "lll", "kkk", "mmm", "ooo", "hhh" }; List<String> s1 = Arrays.asList(s); System.out.println(s1); for (String temp : s) { System.out.println(temp); } System.out.println("######"); // lamdba表達式 s1.forEach(temp -> { System.out.println(temp); }); System.out.println("-------"); s1.forEach(System.out::println); } }
2.Lambda表達式與函數式接口,Lambda表達式的類型,也被稱爲「目標類型」,Lambda表達式的目標類型必須是「函數式接口」。函數式接口表明的是一個抽象方法的接口。Runable、ActionListener等都是函數接口。lambda表達式的結果是被當作對象的。java
public class Demo07 { public static void main(String[] args) { // TODO Auto-generated method stub new Thread(){ public void run() { System.out.println("內部類的實現"); }; }.start(); new Thread(() -> {System.out.println("lambda表達式");}).start(); System.out.println("$$$$$$$$$$"); Runnable a1=new Runnable() { @Override public void run() { // TODO Auto-generated method stub System.out.println("匿名內部類"); } }; Runnable a2=()->{ System.out.println("Lamdba表達式");}; a1.run(); a2.run(); } }
3.使用Lambda表達式調用Arrays類的方法,由於Arrays類有些方法須要Comparator、XxxOperator、XxxFunction等接口的實例,這些接口都是函數式接口,由於lambda能夠調用Arrays的方法。android
import java.util.Arrays; public class Demo08 { public static void main(String[] args) { // TODO Auto-generated method stub String[] arr1 = new String[] { "android", "c#", "c++", "java", "html5" }; Arrays.parallelSort(arr1, (a1, a2) -> a1.length() - a2.length()); System.out.println(Arrays.toString(arr1)); int[] arr2 = new int[] { 3, 2, 6, 3, 2, 1 }; Arrays.parallelPrefix(arr2, (a1, a2) -> a1 + a2); System.out.println(Arrays.toString(arr2)); long[] arr3 = new long[5]; Arrays.parallelSetAll(arr3, a1 -> a1 * 6); System.out.println(Arrays.toString(arr3)); } }