Java的Lambda表達式

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));
	}
}
相關文章
相關標籤/搜索