JDK1.8之內建函式式介面(方法引用的實現)
觀察在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學習圖譜,資料結構與演算法資料等各種資料都可以在後臺獲取。等你哦~
相關文章
- java8新特性之函式式介面、lambda表示式、介面的預設方法、方法和建構函式的引用Java函式
- JDK1.8新特性:Lambda表示式語法和內建函式式介面JDK函式
- PHP內建字串函式實現PHP字串函式
- 利用 PHP 反射實現內建函式文件PHP反射函式
- ?Java8新特性之Lambda表示式,函式式介面,方法引用和default關鍵字Java函式
- 內建函式函式
- webgl內建函式--指數函式Web函式
- webgl內建函式--通用函式Web函式
- JAVA基礎之5-函式式介面的實現Java函式
- Golang記憶體分配內建函式之new函式Golang記憶體函式
- MySQL 內建函式MySql函式
- hive內建函式Hive函式
- php 內建函式PHP函式
- Mysql內建函式MySql函式
- 14、內建函式函式
- awk內建函式函式
- js內建函式JS函式
- python內建函式-eval()函式與exec()函式的區別Python函式
- webgl內建函式--幾何函式與矩陣函式Web函式矩陣
- webgl內建函式--向量函式與紋理查詢函式Web函式
- Hive函式(內建函式+自定義標準函式UDF)Hive函式
- (十六)Python學習之內建函式Python函式
- Python分享之內建函式清單Python函式
- PHP不使用任何內建函式實現字串翻轉PHP函式字串
- Python內建函式Python函式
- python 內建函式Python函式
- Pyhton內建函式大全函式
- Oracle 內建函式三Oracle函式
- Oracle 內建函式一Oracle函式
- Oracle 內建函式二Oracle函式
- 18. 內建函式函式
- 幾個重要的內建函式函式
- python的部分內建函式Python函式
- 用Map+函式式介面來實現策略模式函式模式
- webgl內建函式--角度和三角函式Web函式
- hive學習筆記之七:內建函式Hive筆記函式
- php函式引用傳遞引數的方法PHP函式
- (函式)實現strstr函式函式