Java 中有哪些內建函式式介面?


**java.util.function** 包定義了幾個內建函式式介面,在建立 **lambda 表示式** 或 **方法引用** 時可以使用這些介面。

內建函式式介面

1) Function 介面

**Function 介面** 只有一個單獨的方法 **apply()**。它可以接受任何資料型別的物件,並返回任何資料型別的結果。

示例

import java.util.*;
import java.util.function.*;

public class FunctionTest {
   public static void main(String args[]) {
      String[] countries = {"India", "Australia", "England", "South Africa", "Srilanka", "Newzealand", "West Indies", "Scotland"};
      Function<String[], String> converter = (all) -> {  // lambda expression
         String names = "";
         for(String n : all) {
            String result = n.substring(0, n.indexOf(""));
            result = n.substring(n.indexOf("")) + " " + result;
            names += result + "
";          }          return names;       };       System.out.println(converter.apply(countries));    } }

輸出

India
Australia
England
South Africa
Srilanka
Newzealand
West Indies
Scotland


2) Supplier 介面

**Supplier 介面** 只有一個單獨的方法,稱為 **get()**。它不接受任何引數,並返回任何資料型別的一個物件。

示例

import java.util.*;
import java.util.function.*;

public class SupplierTest {
   private static void printNames(Supplier<String> arg) {
      System.out.println(arg.get());
   }
   private static void listBeginWith(List<String> list, Predicate<String> valid) {
      printNames(() -> "
List of countries:");       list.forEach(country -> {     // lambda expression          if(valid.test(country)) {             printNames(() -> country);          }       });    }    public static void main(String[] args) {       String[] countries = {"India", "Australia", "England", "South Africa", "Srilanka", "Newzealand", "West Indies"};       List<String> countryList = Arrays.asList(countries);       listBeginWith(countryList, (s) -> s.startsWith("I"));       listBeginWith(countryList, (s) -> s.contains("I"));       listBeginWith(countryList, (s) -> s.endsWith("ia"));    } }

輸出

List of countries:
India

List of countries:
India
West Indies

List of countries:
India
Australia


3) Consumer 介面

**Consumer 介面** 只有一個單獨的方法,稱為 **accept()**。它接受任何資料型別的單個引數,並且不返回任何結果。

示例

import java.util.*;
import java.util.function.*;

public class ConsumerTest {
   public static void main(String[] args) {
      String[] countries = {"India", "Australia", "England", "South Africa", "Srilanka", "Newzealand", "West Indies"};
      System.out.print("The list of countries:
");       Arrays.asList(countries).forEach((country) -> System.out.println(country)); // lambda expression    } }

輸出

The list of countries:
India
Australia
England
South Africa
Srilanka
Newzealand
West Indies


4) Predicate 介面

**Predicate 介面** 只有一個單獨的方法**test()**。它可以是 **true** 或 **false**,具體取決於其變數的值。

示例

import java.util.*;
import java.util.function.*;

public class PredicateTest {
   private static List getBeginWith(List<String> list, Predicate<String> valid) {
      List<String> selected = new ArrayList<>();
      list.forEach(country -> {     // lambda expression
         if(valid.test(country)) {
            selected.add(country);
         }
      });
      return selected;
   }
   public static void main(String[] args) {
      String[] countries = {"India", "Australia", "England", "South Africa", "Srilanka", "Newzealand", "West Indies"};
      List<String> countryList = Arrays.asList(countries);
         System.out.println(getBeginWith(countryList, (s) -> s.startsWith("A")));
         System.out.println(getBeginWith(countryList, (s) -> s.contains("W")));
         System.out.println(getBeginWith(countryList, (s) -> s.endsWith("nd")));
   }
}

輸出

[Australia]
[West Indies]
[England, Newzealand]

更新時間:2020-07-10

7K+ 瀏覽量

開啟你的 職業生涯

完成課程,獲得認證

開始
廣告