markdown-it
demo
Delete
Submit
clear
permalink
### 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` 的使用範例。通過定義自己的供應者,我們可以根據需要返回各種不同的值或計算結果。
html
source
debug
Fork me on GitHub