這篇文章主要為大家介紹了關於java8學習教程之函數引用的使用,文中透過範例程式碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習下。
前言
我們在上一篇文章中以實例講解如何定義和使用lambda 表達式,以及與其它語言相比, lambda 表達式在Java 中的特殊規格。並且提到,lambda 表達式可以進一步簡化為函數引用。
這篇文章將介紹如何使用函數引用,話不多說了,來一起看看詳細的介紹。
函數所引用的型別
函數參考分為以下四個:
靜態函數,例如Integer 類別的parseInt 函數,可以寫作Integer::parseInt
物件層級函數的引用,例如String 類別的length 函數,可以寫作String::length
具體實例的函數的引用,例如名稱為expensiveTransaction 的一個實例的getValue,寫作expensiveTransaction::getValue
建構子的參考
#靜態函數
例如:
Function<String, Integer> stringToInteger = (String s) -> Integer.parseInt(s);
可以寫作:
Function<String, Integer> stringToInteger = Integer::parseInt;
##可以寫物件層級函數的參考
BiPredicate<List<String>, String> contains = (list, element) -> list.contains(element);
#
BiPredicate<List<String>, String> contains = List::contains;
建構子的引用
下面再舉一個建構子的例子, 先定義一個函數式接口,唯一的方法get 會傳回指定型別的物件。@FunctionalInterface public interface Supplier<T> { T get(); }
Supplier<TantanitReader> constructor = () -> new TantanitReader(); TantanitReader tantanitReader = constructor.get();
Supplier<TantanitReader> constructor2 = TantanitReader::new; TantanitReader tantanitReader2 = constructor2.get();
public TantanitReader(String loginName) { this.loginName = loginName; }
Function<String,TantanitReader> constructor3 = (loginName) -> new TantanitReader(loginName); TantanitReader tantanitReader3 = constructor3.apply("jack"); Function<String,TantanitReader> constructor4 = TantanitReader::new; TantanitReader tantanitReader4 = constructor4.apply("jack"); TantanitReader tantanitReader5 = constructor4.apply("tom");
R apply(T t);
小結
使用函數引用不僅可以簡化lambda 表達式,而且在語意上可以更專注於方法名稱,也就是要做的事,抽象層次更加接近人類的認知。所以,應盡可能使用函數引用。總結#
以上是Java8中關於函數引用的使用方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!