一、Supplier介面概述
Java 8中引入了函數式編程,添加了一些新的函數式介面和Lambda表達式。其中,Supplier是一個函數式介面,它不接受任何參數,返回一個結果。官方定義如下:
public interface Supplier<T> {
T get();
}
可以看出,Supplier介面只有一個get方法,該方法會返回一個類型為T的結果。通常情況下,由於只有一個方法,可以使用Lambda表達式來創建Supplier介面的實例。
二、使用Supplier介面
下面來看一些使用Supplier介面的示例,以便更好地理解Supplier介面的使用方法。
1、創建一個隨機數
import java.util.Random;
import java.util.function.Supplier;
public class RandomNumber {
public static void main(String[] args) {
// 使用Lambda表達式創建Supplier介面實例
Supplier<Integer> randomSupplier = () -> new Random().nextInt();
// 獲取隨機數
int randomNumber = randomSupplier.get();
// 輸出隨機數
System.out.println(randomNumber);
}
}
上面的代碼使用了Lambda表達式創建了一個Supplier實例,該實例可以返回一個Integer對象。調用get方法獲取Supplier返回的隨機數。輸出結果類似於以下內容:
-1080115599
2、獲取系統時間戳
import java.util.Date;
import java.util.function.Supplier;
public class CurrentTime {
public static void main(String[] args) {
// 使用Lambda表達式創建Supplier介面實例
Supplier<Long> currentTimeSupplier = System::currentTimeMillis;
// 獲取當前時間戳
long currentTime = currentTimeSupplier.get();
// 輸出當前時間戳
System.out.println(new Date(currentTime));
}
}
上面的代碼使用了方法引用來創建Supplier實例,該實例可以返回當前時間戳。調用get方法獲取Supplier返回的時間戳。輸出結果類似於以下內容:
Thu Jul 22 11:52:18 CST 2021
3、獲取默認值
import java.util.function.Supplier;
public class DefaultValue {
public static void main(String[] args) {
String text = null;
// 使用Lambda表達式創建Supplier介面實例
Supplier<String> defaultValueSupplier = () -> "default";
// 獲取text的值,如果text為null則返回default
String textWithDefault = text == null ? defaultValueSupplier.get() : text;
// 輸出text的值,如果text為null則輸出default
System.out.println(textWithDefault);
}
}
上面的代碼使用了Lambda表達式創建了一個返回默認值的Supplier實例。此代碼還使用了Java的三元運算符來檢查變數text是否為null。如果變數text為null,則使用Supplier實例返回默認值,否則使用變數text的值。輸出結果類似於以下內容:
default
三、Supplier介面使用場景
Supplier介面常用於需要延遲計算或者計算時間較長的操作。如果我們需要在條件成立時才計算某個值,Supplier的實現可以封裝該值的計算,然後根據需要計算該值。此外,Supplier還可以用於獲取默認值、生成隨機值等。
上文提到的三個示例都展示了不同的Supplier使用場景。第一個示例中,我們創建了一個Supplier實例來獲取隨機數。第二個示例中,我們使用Supplier介面從方法引用中獲取當前時間戳。第三個示例中,我們使用Supplier介面獲取默認值。
在Java中,Supplier還經常和Stream API一起使用。Stream API是Java 8添加的序列處理API,它允許開發人員以聲明性方式來操作數據。在使用Stream API時,可使用Supplier來提供數據源。
四、總結
在Java 8中,Supplier是一個非常有用的函數式介面。它是一個不接收任何參數的函數,提供了一種抽象來延遲計算或通過計算生成值,以及獲取默認值和生成隨機值。我們可以使用Lambda表達式或者方法引用來創建Supplier實例,還可以將Supplier與Stream API結合使用,提供數據源。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/190048.html