亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java8學(xué)習(xí)教程之函數(shù)引用的使用方法

 更新時間:2017年09月18日 11:05:17   投稿:daisy  
這篇文章主要給大家介紹了關(guān)于java8學(xué)習(xí)教程之函數(shù)引用的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)下吧。

前言

我們在上一篇文章 中以實例講解如何定義和使用 lambda 表達(dá)式,以及與其它語言相比,lambda 表達(dá)式在 Java 中的特殊規(guī)范。并且提到,lambda 表達(dá)式可以進一步簡化為函數(shù)引用。

這篇文章將介紹如何使用函數(shù)引用,話不多說了,來一起看看詳細(xì)的介紹吧。

函數(shù)引用的類型

函數(shù)引用分為以下四種:

  • 靜態(tài)函數(shù),比如 Integer 類的 parseInt 函數(shù),可以寫作 Integer::parseInt
  • 對象級別函數(shù)的引用,比如 String 類的 length 函數(shù),可以寫作 String::length
  • 具體實例的函數(shù)的引用,比如名稱為 expensiveTransaction 的一個實例的 getValue,寫作 expensiveTransaction::getValue
  • 構(gòu)造函數(shù)的引用

靜態(tài)函數(shù)

比如:

Function<String, Integer> stringToInteger = (String s) -> Integer.parseInt(s);

可以寫作:

Function<String, Integer> stringToInteger = Integer::parseInt;

對象級別函數(shù)的引用

BiPredicate<List<String>, String> contains =
(list, element) -> list.contains(element);

可以寫作:

BiPredicate<List<String>, String> contains = List::contains;

構(gòu)造函數(shù)的引用

下面再舉一個構(gòu)造函數(shù)的例子, 首先定義一個函數(shù)式接口,唯一的方法 get 返回指定類型的對象。

@FunctionalInterface
public interface Supplier<T> {
 T get();
}
Supplier<TantanitReader> constructor = () -> new TantanitReader();
TantanitReader tantanitReader = constructor.get();

上述代碼的 lambda 表達(dá)式 new 并返回一個新的對象,使得 constructor 變量成為一個構(gòu)造器的引用。

等價于以下函數(shù)引用:

Supplier<TantanitReader> constructor2 = TantanitReader::new;
TantanitReader tantanitReader2 = constructor2.get();

以上的例子都是沒有參數(shù)的情況,下面仍然以構(gòu)造函數(shù)為例,介紹有參數(shù)的情況:

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

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

R apply(T t);

作用為根據(jù)一個參數(shù),返回一個結(jié)果。我們由此可以使用 constructor4 以及相應(yīng)的函數(shù)引用 constructor5。

小結(jié)

使用函數(shù)引用不僅可以簡化 lambda 表達(dá)式,而且在語義上可以更加專注于方法名稱,也就是要做的事,抽象級別更加接近人類的認(rèn)知。所以,應(yīng)當(dāng)盡可能使用函數(shù)引用。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • SpringBoot文件上傳的原理解析

    SpringBoot文件上傳的原理解析

    這篇文章主要介紹了SpringBoot文件上傳的原理解析,SpringBoot 文件上傳是一種方便快捷的方式,可以將文件上傳到服務(wù)器,通過使用SpringBoot的文件上傳功能,可以輕松地實現(xiàn)文件上傳功能,需要的朋友可以參考下
    2023-10-10
  • Spring Eureka 未授權(quán)訪問漏洞修復(fù)問題小結(jié)

    Spring Eureka 未授權(quán)訪問漏洞修復(fù)問題小結(jié)

    項目組使用的 Spring Boot 比較老,是 1.5.4.RELEASE ,最近被檢測出 Spring Eureka 未授權(quán)訪問漏洞,這篇文章主要介紹了Spring Eureka 未授權(quán)訪問漏洞修復(fù)問題小結(jié),需要的朋友可以參考下
    2024-04-04
  • JDK1.6“新“特性Instrumentation之JavaAgent(推薦)

    JDK1.6“新“特性Instrumentation之JavaAgent(推薦)

    這篇文章主要介紹了JDK1.6“新“特性Instrumentation之JavaAgent,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • SpringBoot實現(xiàn)自定義啟動器的示例詳解

    SpringBoot實現(xiàn)自定義啟動器的示例詳解

    雖然Spring官方給我們提供了很多的啟動器供我們使用,但有時候我們也會遇到某些特殊場景,這些啟動器滿足不了。這個時候就需要自定義一個啟動器供我們使用,本文為大家介紹了SpringBoot實現(xiàn)自定義啟動器的方法,希望對大家有所幫助
    2023-01-01
  • Java 線程池詳解及實例代碼

    Java 線程池詳解及實例代碼

    這篇文章主要介紹了Java 線程池的相關(guān)資料,并符實例代碼,幫助大家學(xué)習(xí)參考,需要的朋友可以參考下
    2016-09-09
  • 一文帶你詳細(xì)認(rèn)識文件與Java中操作文件

    一文帶你詳細(xì)認(rèn)識文件與Java中操作文件

    文件處理是任何應(yīng)用程序的重要部分,Java 提供了許多用于創(chuàng)建、讀取、更新和刪除文件的方法,這篇文章主要給大家介紹了關(guān)于認(rèn)識文件與Java中操作文件的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • MybatisPlus結(jié)合groupby實現(xiàn)分組和sum求和的步驟

    MybatisPlus結(jié)合groupby實現(xiàn)分組和sum求和的步驟

    這篇文章主要介紹了MybatisPlus結(jié)合groupby實現(xiàn)分組和sum求和的步驟,這次使用的是LambdaQueryWrapper,使用QueryWrapper相對來說簡單點就不寫了,本文分步驟給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧
    2023-12-12
  • SpringCloud Hystrix的使用

    SpringCloud Hystrix的使用

    這篇文章主要介紹了SpringCloud Hystrix的使用,幫助大家更好的理解和學(xué)習(xí)使用SpringCloud,感興趣的朋友可以了解下
    2021-04-04
  • Java實現(xiàn)俄羅斯方塊游戲的示例代碼

    Java實現(xiàn)俄羅斯方塊游戲的示例代碼

    俄羅斯方塊是一個最初由阿列克謝帕吉特諾夫在蘇聯(lián)設(shè)計和編程的益智類視頻游戲。本文將利用Java實現(xiàn)這一經(jīng)典的小游戲,感興趣的可以動手試一試
    2022-03-03
  • SpringBoot默認(rèn)包掃描機制及@ComponentScan指定掃描路徑詳解

    SpringBoot默認(rèn)包掃描機制及@ComponentScan指定掃描路徑詳解

    這篇文章主要介紹了SpringBoot默認(rèn)包掃描機制及@ComponentScan指定掃描路徑詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論