首頁  >  文章  >  Java  >  Java8中關於函數引用的使用方法介紹

Java8中關於函數引用的使用方法介紹

黄舟
黄舟原創
2017-09-19 10:27:021585瀏覽

這篇文章主要為大家介紹了關於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();

上述程式碼的 lambda 表達式 new 並傳回一個新的對象,使得 constructor 變數成為一個建構器的參考。

等價於以下函數引用:


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");

這時由於函數只有一個參數,可以使用Java 自帶的Function這個函數式接口,它實際起作用的函數如下:


R apply(T t);

作用為根據一個參數,傳回一個結果。我們由此可以使用 constructor4 以及對應的函數來引用 constructor5。

小結

使用函數引用不僅可以簡化lambda 表達式,而且在語意上可以更專注於方法名稱,也就是要做的事,抽象層次更加接近人類的認知。所以,應盡可能使用函數引用。

總結#

以上是Java8中關於函數引用的使用方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn