### Consumer
下面是一個 Java Consumer 的使用範例:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
List<String> fruits = new ArrayList<>();
fruits.add("蘋果");
fruits.add("香蕉");
fruits.add("橘子");
fruits.add("葡萄");
// 使用 Consumer 印出水果名稱
Consumer<String> printFruit = (String fruit) -> {
System.out.println(fruit);
};
// 使用 forEach 方法與 Consumer 印出每個水果
fruits.forEach(printFruit);
}
}
```
這個範例中,我們先建立一個 List 物件 `fruits`,並加入幾個水果名稱。接著,我們建立一個 Consumer 物件 `printFruit`,用來印出水果名稱。在 `forEach` 方法中,我們將 `printFruit` 作為參數傳入,這樣就可以透過 Consumer 的 `accept` 方法來處理每個水果。最後,每個水果的名稱都會被印出來。
執行上面的程式碼,你可以看到以下的輸出:
```
蘋果
香蕉
橘子
葡萄
```
這就是使用 Java Consumer 的一個簡單範例。使用 Consumer 可以讓我們定義一個行為或操作,並在需要的地方反覆使用。
### Function
下面是一個使用 java.util.function.Function 的範例:
```java
import java.util.function.Function;
public class Main {
public static void main(String[] args) {
// 建立一個 Function 物件,將字串轉換為整數
Function<String, Integer> convertToInt = Integer::parseInt;
Function<Integer, String> convertToString = (num) -> {
if (num % 2 == 0) {
return "偶數";
} else {
return "奇數";
}
};
// 使用 Function 物件進行轉換
System.out.println(convertToInt.apply("12345"));
// 使用 Function 物件進行轉換
System.out.println(convertToString.apply(0));
System.out.println(convertToString.apply(1));
System.out.println(convertToString.apply(2));
}
}
```
在這個範例中,我們建立了一個 Function 物件 `convertToInt`,它接受一個字串作為輸入,並將其轉換為整數。我們使用 `apply` 方法來應用 Function 物件,在這個例子中我們將字串 "12345" 作為輸入,並得到一個整數結果。最後,我們將結果印出到螢幕上。
### Predicate
以下是一個使用 java.util.function.Predicate 的範例:
```java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David", "Eve");
System.out.println("所有名字:");
names.forEach(System.out::println);
System.out.println("\n以'A'開頭的名字:");
Predicate<String> startsWithAPredicate = name -> name.startsWith("A");
List<String> startsWithA = names.stream()
.filter(startsWithAPredicate)
.collect(Collectors.toList());
startsWithA.forEach(System.out::println);
System.out.println("\n長度大於4的名字:");
Predicate<String> lengthGreaterThan4Predicate = name -> name.length() > 4;
List<String> lengthGreaterThan4 = names.stream()
.filter(lengthGreaterThan4Predicate)
.collect(Collectors.toList());
lengthGreaterThan4.forEach(System.out::println);
}
}
```
這個範例展示了如何使用 Predicate 介面來過濾名字的列表。首先我們創建了一個名字的列表,然後使用不同的 Predicate 來過濾該列表。在範例中,我們定義了兩個 Predicate,一個是以'A'開頭的名字,另一個是長度大於4的名字。然後我們使用這兩個 Predicate 分別過濾名字列表,並將過濾後的結果列印出來。
輸出結果應該是:
```
所有名字:
Alice
Bob
Charlie
David
Eve
以'A'開頭的名字:
Alice
長度大於4的名字:
Charlie
David
```
### Supplier
`java.util.function.Supplier` 是Java 8 中的一個函數式介面,用於提供一個沒有參數但返回結果的操作。
以下是 `java.util.function.Supplier` 的使用範例:
```java
import java.util.function.Supplier;
public class Main {
public static void main(String[] args) {
// 定義一個返回隨機數字的 Supplier
Supplier<Integer> randomSupplier = () -> (int) (Math.random() * 100);
// 使用 Supplier 取得隨機數字
int randomNumber = randomSupplier.get();
System.out.println("隨機數字: " + randomNumber);
// 定義一個返回當前時間的 Supplier
Supplier<Long> currentTimeSupplier = System::currentTimeMillis;
// 使用 Supplier 取得當前時間
long currentTime = currentTimeSupplier.get();
System.out.println("當前時間: " + currentTime);
}
}
```
此範例中,我們首先定義了兩個 `Supplier`,分別是 `randomSupplier` 與 `currentTimeSupplier`。
`randomSupplier` 使用了Lambda表示法,返回一個介於0和100之間的隨機數字。
`currentTimeSupplier` 使用了方法參考的方式,返回當前的時間戳。
接著,我們使用 `Supplier` 的 `get()` 方法來獲取隨機數字和當前時間,並將結果輸出到控制台。
執行上述程式,將會得到類似以下輸出:
```
隨機數字: 79
當前時間: 1592870169311
```
這便是 `java.util.function.Supplier` 的使用範例。通過定義自己的供應者,我們可以根據需要返回各種不同的值或計算結果。