JDK1.8之內建函式式介面(方法引用的實現)

weixin_34236869發表於2019-01-15
9003228-eae2e320b1a42a10.png
image.png
觀察在JDK1.8之中提供的新的函式式介面包以及提供的四個函式式介面。

方法引用都需要定義一個函式式介面,可是不管如何操作,實際上有可能操作的介面只有四種,在JDK1.8提供了一個包java.util.function,提供有以下四個核心介面。

1.功能性介面(Function)

public interface Function<T,R>{public R apply(T t);}
此介面需要接收一個引數,並且返回一個處理結果

2.消費型介面(Consumer)

public interface Consumer<T>{public void accept(T t);}
此介面只是負責接收資料(引用資料是不需要返回的),並且不返回處理結果。

3.供給型介面(Supplier)

public interface Suppiler<T>{public T get();}
此介面不接收引數,但是返回結果。

4.斷言型介面(Predicate)

public interface Predicate<T>{public boolean test(T t)}
進行判斷操作使用

所有在JDK1.8之中,由於存在以上四個功能型介面,所以一般很少會由使用者去定義新的函式是介面

範例:觀察功能型介面——接收引數並且返回一個處理結果。
String類有一個方法:public boolean startsWith(String str)

package TestDemo;

import java.util.function.Function;

public class TestDemo{
    
    public static void main(String[] args) {
        
        Function<String,Boolean> fun="##hello"::startsWith;//方法引用賦給一個函式式介面

        System.out.println(fun.apply("##"));
    }
}

方法引用賦予一個函式式介面,最終的判斷其實是"##hello".startsWith"##";這個語句。答案為true

範例:消費型介面

package TestDemo;

import java.util.function.Consumer;
import java.util.function.Function;

class MyDemo{
    public void print(String str){//此方法沒有返回值,但是有引數
        System.out.println(str);
    }
}
public class TestDemo{
    
    public static void main(String[] args) {
        
        Consumer<String> cons=new MyDemo()::print;//方法引用賦給一個函式式介面

        cons.accept("Hello World!");
    }
}

範例:供給型介面(Supplier)
引用String類中的toUpperCase()方法
public String toUpperCase();

package TestDemo;

import java.util.function.Supplier;

public class TestDemo{
    
    public static void main(String[] args) {
        
        Supplier<String> sup="hello"::toUpperCase;//方法引用賦給一個函式式介面

        System.out.println(sup.get());
    }
    

}

結果"hello

範例:斷言型介面(Predicate)
String類中有一個equalsIgnoreCase()方法

package TestDemo;

import java.util.function.Predicate;
import java.util.function.Supplier;

public class TestDemo{
    
    public static void main(String[] args) {
        
        Predicate<String> pre="hello"::equalsIgnoreCase;//方法引用賦給一個函式式介面

        System.out.println(pre.test("hello"));//不區分大小寫判斷是否相等
    }
}

答案為true

總結:

開發中所用到的函式式介面一般都為以上4種,所有講的這一切都要為最後的資料流做準備。

關注公眾號CodeInJava,Java學習圖譜,資料結構與演算法資料等各種資料都可以在後臺獲取。等你哦~

相關文章