一. 基本介紹 1. Lambda Lambda是java 8引入的一個新特性,一個Lambda表達式是一個匿名函數,它提供了更為簡單的語法和協作方式,能夠讓我們通過表達式來代替函數式介面。 Lambda表達式完全可以用在簡化創建匿名內部類上。 2. 函數式介面 所謂的函數式介面,就是指 只有一個抽 ...
一. 基本介紹
Lambda
Lambda是java 8引入的一個新特性,一個Lambda表達式是一個匿名函數,它提供了更為簡單的語法和協作方式,能夠讓我們通過表達式來代替函數式介面。
Lambda表達式完全可以用在簡化創建匿名內部類上。
函數式介面
所謂的函數式介面,就是指只有一個抽象方法的介面
二.Lambda格式
Lambda格式由3個部分組成:一些參數,一個箭頭,一段代碼
標準格式為:
(參數類型 參數名稱) -> { 代碼語句 }
說明:
- 小括弧里的語法與傳統方法的參數列表一致,如果沒有參數,就留空;如果有多個參數,用逗號分隔。
->
是新引入的語法格式,代表指向動作- 大括弧內的語法與傳統方法體要求基本一致。
省略樣式:
在Lambda標準格式的基礎上,省略樣式寫法的規則為:
- 小括弧內參數類型可以省略
- 如果小括弧內有且僅有一個參數,則小括弧可以省略
- 如果大括弧內有且僅有一個語句,則無論是否有返回值,都可以省略大括弧、return關鍵字及語句分號
三.Lambda的使用前提
- 使用Lambda必須具有介面,並且要求介面有且僅有一個抽象方法。(函數式介面)
- 使用Lambda必須具有上下文推斷。也就是調用方法的參數或局部變數類型必須為Lambda對應的介面類型,才能使用Lambda作為該介面的實例。
四.實例
基本的Lambda例子
假設有一個List,使用for迴圈遍歷
import java.util.*; public class LambdaDemo { public static void main(String[] args) { String[] fruits = {"apple", "banana", "peach", "watermelon", "strawberry", "pear"}; List<String> fruitsList = Arrays.asList(fruits); // java8 之前的迴圈 for (String f : fruitsList) { System.out.println(f + " "); } System.out.println("--------------------"); // 使用lambda表達式操作迴圈 fruitsList.forEach(f -> System.out.println(f + " ")); } }
實現Runnable介面時
public class LambdaDemo { public static void main(String[] args) { // 創建線程實例 Thread t = new Thread(new Runnable(){ @Override public void run() { System.out.println(Thread.currentThread().getName()); } }); // 使用lambda表達式 創建Runnable介面 new Thread(() -> System.out.println(Thread.currentThread().getName())).start(); t.start(); System.out.println(Thread.currentThread().getName()); } }
Lambda對集合進行排序
import java.util.*; public class LambdaDemo { public static void main(String[] args) { String[] fruits = {"apple", "peach", "watermelon", "banana", "strawberry", "pear"}; // 使用匿名內部類排序 // Arrays.sort(fruits, new Comparator<String>() { // @Override // public int compare(String s1, String s2) { // return s1.compareTo(s2); // } // }); // 使用lambda表達式排序 Arrays.sort(fruits, (s1, s2) -> s1.compareTo(s2)); System.out.println(Arrays.toString(fruits)); } }