1. 程式人生 > 其它 >Java 8 內建四大核心函式式介面

Java 8 內建四大核心函式式介面

1、四大核心函式式介面

介面型別 表現形式 實現方法 說明
消費性介面 Consumer<T> void accept<T t> 引數為 t,無返回值
供給型介面 Supplier<T> T get() 無引數,返回值型別為 T
函式型介面 Function<T,R> R apply(T t) 引數為 t,返回值型別為 R
斷言型介面 Predicate<T> Boolean test(T t) 引數為 t,返回值型別為 Boolean

ssssssssssssss

  

dddddddd

ssssssssssss

ssss

2、四大核心函式介面實踐

public class LambdaDemo {
    // 1、消費性介面測試
    @Test
    public void testLambda01() {
        someThingHappy("summer", (x) -> {
            String str = x;
            System.out.println("某個人喜歡大保健,他覺得只有大保健能讓他快樂,這個人就是 " + x);
        });
    }

    // 2、供給型介面測試
    @Test
    public void testLambda02() {
        List<String> strEqualTo5 = getStrEqualTo5(() -> {
            String[] strArr = {"summer", "erico", "puff", "defire", "hank"};
            List<String> list = Arrays.asList(strArr);
            ArrayList<String> strList = new ArrayList<>();

            for (String str : list) {
                if (str.length() == 4) {
                    strList.add(str);
                }
            }
            return strList;
        });
        System.out.println(strEqualTo5);
    }

    // 3、函式型介面測試
    @Test
    public void testLambda03() {
        Integer index = getIndexFromArray((x) -> {
            int i = 0;
            for (int j = 0; j < x.length; j++) {
                if (Objects.equals(x[j], "summer")) {
                    i = j;
                }
            }
            return i;
        });
        System.out.println(index);
    }

    // 4、斷言型介面測試
    @Test
    public void testLambda04() {
        Boolean isEricoExists = checkUser((x) -> {
            Boolean flag = false;
            for (String str : x) {
                if (Objects.equals(str, "erico")) {
                    flag = true;
                }
            }
            return flag;
        });
        System.out.println(isEricoExists);
    }

    // 需求 1、輸出一段快樂的話
    // Consumer<T> : 消費性介面
    // void accept(T t)
    public void someThingHappy(String userName, Consumer<String> consumer) {
        consumer.accept(userName);
    }

    // 需求 2、返回一個集合,集合中存放長度等於 5 的字串
    // Supplier<T> : 供給型介面
    // T get();
    public List<String> getStrEqualTo5(Supplier<List<String>> supplier) {
        return supplier.get();
    }

    // 需求 3、篩選出名稱為 summer 的使用者,並返回其在陣列中的索引位置
    // Function<T,R>
    // R apply(T t)
    public Integer getIndexFromArray(Function<String[], Integer> function) {
        String[] strArr = {"erico", "puff", "defire", "hank", "summer"};
        return function.apply(strArr);
    }

    // 需求 4、判斷指定的集合中是否存在一個叫 erico 的人
    // Predicate<T>
    // Boolean test<T>
    public Boolean checkUser(Predicate<List<String>> predicate) {
        String[] strArr = {"erico", "puff", "defire", "hank", "summer"};
        List<String> listStr = Arrays.asList(strArr);
        return predicate.test(listStr);
    }
}