你知道 jdk8新特性函數式接口嗎?

本文目錄:

1、什麼是函數式接口?

2、自定義函數式接口

3、作爲參數傳遞的Lanbda表達式

4、java內置四大核心函數式接口

5、其他接口

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

什麼是函數式接口?

1)只包含一個抽象方法的接口,稱爲函數式接口。

2)可以通過Lambda表達式來創建該接口的對象(若Lambda表達式拋出一個受檢異常,那麼該異常需要在目標接口的抽象方法上進行聲明)。

3)我們可以在任意函數式接口上使用@FunctionalInterface註釋,這樣做可以檢查它是否是一個函數式接口,同時javadoc也會包含一條聲明,說明這個接口是一個函數式接口。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

自定義函數式接口

@FunctionalInterface
public interface MyFunction {
    public String getValue(String str);
}


函數式接口中使用泛型
@FunctionalInterface
public interface MyFunction2<T,R> {
    public R getValue2(T t,T T2);
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

作爲參數傳遞Lambda表達式:

        作爲參數傳遞給Lambda表達式:爲了將Lambda表達式作爲參數傳遞,接收Lambda表達式的參數類型必須是與該Lambda表達式兼容的函數式接口類型

@Test
    public void test2(){
   
//       去除字符串首尾空格
        String s = strHandler("\t\t\t\t\t大夫", (str) -> str.trim());
        System.out.println(s);
//          把小寫字母變成大寫
        String upper = strHandler("adsaff",(str -> str.toUpperCase()));
        System.out.println(upper);
//            截取字符串 按下標 從0開始
        String s1 = strHandler("滿意點個贊,謝謝", (str) -> str.substring(1,4));
        System.out.println(s1);
    }

    public String strHandler(String str,MyFunction mf){
        return mf.getValue(str);
    }

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

JAVA內置四大核心函數式接口

* java8 內置的四大核心接口
* Consumer<T>:消費性接口
*       void accept(T t);
* Supplier<T>:供給型接口
*       T get();
* Function<T,R>: 函數型接口
*       R apply(T t);
* Predicate<T> : 斷言型接口
*       boolean test(T t);

1、Consumer<T>:消費性接口       傳進一個參數 然後對該參數進行操作 沒有返回值 操作了也就純操作

      void accept(T t);

@Test
    public void run() {
        happy(10000, (m) -> System.out.println("消費了" + m + "元"));
    }

    public void happy(double money, Consumer<Double> consumer) {
        consumer.accept(money);
    }

2、Supplier<T>:供給型接口        用於給你產生一些對象 你可以指定你要產生的對象類型

      void accept(T t);

@Test
    public void run2() {
        List<Integer> numList = getNumList(10, () -> (int) (Math.random() * 100));
        for (Integer integer : numList) {
            System.out.println(integer);
        }
    }

    //需求:產生指定個數的整數,並放入集合中
    public List<Integer> getNumList(int num, Supplier<Integer> supplier) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < num; i++) {
            Integer n = supplier.get();
            list.add(n);
        }
        return list;
    }

3、Function<T,R>函數型接口:傳進去一個傳參數,返回一個參數,可以通過定義泛型對其類型進行操作

     R apply(T t);

@Test
    public void run3(){
        //去除首尾空格
        String s = strHandler("\t\t\t\t 九點三公分課程", (str) -> str.trim());
        System.out.println(s);
        //截取字符串
        String s1 = strHandler("九點三公分課程", (str) -> str.substring(1, 5));
        System.out.println(s1);
    }
    //需求:用於處理字符串
    public String strHandler(String str, Function<String, String> function) {
        return function.apply(str);
    }

4、Predicate<T>: 斷言型接口 用於一些做一些判斷型操作

    boolean test(T t);

@Test
    public void run4(){
        List<String> list = Arrays.asList("action","string","char","shore");
        List<String> strings = filterStr(list, (s) -> s.length() > 5);
        for (String s:strings) {
            System.out.println(s);
        }
    }
    //需求:將滿足條件的字符串放入集合中
    public List<String> filterStr(List<String> list, Predicate<String> pre){
        List<String> list1 = new ArrayList<>();
        for (String str:list) {
            if (pre.test(str)){
                list1.add(str);
            }
        }
        return list1;
    }
---------------------------------------------------------------------------------------------------------------------------

其他接口

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章