最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JDK都出到14了,你有什么理由不會(huì)函數(shù)式編程(推薦)

 更新時(shí)間:2020年05月13日 14:26:31   作者:Harvey  
這篇文章主要介紹了JDK都出到14了,你有什么理由不會(huì)函數(shù)式編程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

函數(shù)式接口

先看一下官方定義

Functional interfaces provide target types for lambda expressions and method references.

可以看出函數(shù)式接口主要用于lambda表達(dá)式,這類(lèi)接口只定義了唯一的抽象方法的接口(除了隱含的Object對(duì)象的公共方法),一開(kāi)始也稱(chēng)SAM類(lèi)型接口(Single Abstract Method)。

簡(jiǎn)單使用

List<Integer> list = Lists.newArrayList(1,2,3);
    list.forEach(r -> {
      System.out.println("re = " + Math.sqrt(r));
    });

看一下 foreach 實(shí)現(xiàn),在Iterable.java

default void forEach(Consumer<? super T> action) {
    Objects.requireNonNull(action);
    for (T t : this) {
      action.accept(t);
    }
  }

這里出現(xiàn)的Consumer就是一個(gè)函數(shù)式接口, java8 提供了一些常用的函數(shù)式接口

  1. Predicate -- 傳入一個(gè)參數(shù),返回一個(gè)bool結(jié)果, 方法為boolean test(T t)
  2. Consumer -- 傳入一個(gè)參數(shù),無(wú)返回值,純消費(fèi)。 方法為void accept(T t)
  3. Function -- 傳入一個(gè)參數(shù),返回一個(gè)結(jié)果,方法為R apply(T t)
  4. Supplier -- 無(wú)參數(shù)傳入,返回一個(gè)結(jié)果,方法為T get()
  5. UnaryOperator -- 一元操作符, 繼承Function,傳入?yún)?shù)的類(lèi)型和返回類(lèi)型相同。
  6. BinaryOperator -- 二元操作符, 傳入的兩個(gè)參數(shù)的類(lèi)型和返回類(lèi)型相同, 繼承BiFunction

這里就不一一列舉了,具體請(qǐng)見(jiàn) java.util.function 包 都很簡(jiǎn)單,不太清楚的自行g(shù)oogle

擴(kuò)展

但是jdk提供的有時(shí)候不一定能滿(mǎn)足需求,這個(gè)時(shí)候就需要我們自定義函數(shù)式接口

1.普通的 Function 或者 Consumer 只能就收一個(gè)參數(shù),BiFuntion 和 BiConsumer 也只能接受連個(gè)參數(shù),參數(shù)更多的情況就無(wú)法滿(mǎn)足了

以 consumer 為例,先自定義一個(gè)接口

@FunctionalInterface
  public interface TriConsumer<T, U, W> {
    void accept(T t, U u, W w);

    default TriConsumer<T, U, W> andThen(TriConsumer<? super T, ? super U, ? super W> after) {
      Objects.requireNonNull(after);

      return (l, r, w) -> {
        accept(l, r, w);
        after.accept(l, r, w);
      };
    }
  }

函數(shù)式接口一般使用 @FunctionalInterface 注解注釋?zhuān)陨昝髟摻涌谑且粋€(gè)函數(shù)式接口, 這里提供一個(gè) andThen 方法以支持連續(xù)調(diào)用

使用方法

TriConsumer<Integer, Integer, Integer> consumer = (a, b, c) -> {
      System.out.println(a + b + c);
    };
    consumer.accept(5,6,7);

funtion類(lèi)似,這里就不舉例了

2.異常捕獲

FunctionalInterface 提供的接口一般是不拋出異常的,意味著我們?cè)谑褂玫臅r(shí)候需要在方法體內(nèi)部捕獲異常,這里定義一種可以拋出異常的接口

@FunctionalInterface
  public interface InterfaceException<T> {
    void apply(T t) throws Exception;
  }

總結(jié)

到此這篇關(guān)于JDK都出到14了,你有什么理由不會(huì)函數(shù)式編程(推薦)的文章就介紹到這了,更多相關(guān)jdk 函數(shù)式編程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java使用jacob.jar將word轉(zhuǎn)pdf

    java使用jacob.jar將word轉(zhuǎn)pdf

    這篇文章主要為大家詳細(xì)介紹了java利用jacob.jar將word轉(zhuǎn)pdf,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • microlog4android將Android Log日志寫(xiě)到SD卡文件中實(shí)現(xiàn)方法

    microlog4android將Android Log日志寫(xiě)到SD卡文件中實(shí)現(xiàn)方法

    這篇文章主要介紹了microlog4android將Android Log日志寫(xiě)到SD卡文件中實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • 淺談JAVA如何生成UUID唯一標(biāo)識(shí)

    淺談JAVA如何生成UUID唯一標(biāo)識(shí)

    這篇文章主要介紹了淺談JAVA如何生成UUID唯一標(biāo)識(shí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • IntelliJ IDEA 部署 Web 項(xiàng)目,看這一篇夠了!

    IntelliJ IDEA 部署 Web 項(xiàng)目,看這一篇夠了!

    這篇文章主要介紹了IntelliJ IDEA 部署 Web 項(xiàng)目的圖文教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java如何正確處理下載文件時(shí)HTTP頭的編碼問(wèn)題

    Java如何正確處理下載文件時(shí)HTTP頭的編碼問(wèn)題

    這篇文章主要介紹了Java如何正確處理下載文件時(shí)HTTP頭的編碼問(wèn)題,
    通常HTTP消息包括客戶(hù)機(jī)向服務(wù)器的請(qǐng)求消息和服務(wù)器向客戶(hù)機(jī)的響應(yīng)消息,今天來(lái)講解下正確處理下載文件時(shí)HTTP頭的編碼問(wèn)題,需要的朋友可以參考下
    2023-07-07
  • SpringBoot項(xiàng)目中Maven剔除無(wú)用Jar引用的最佳實(shí)踐

    SpringBoot項(xiàng)目中Maven剔除無(wú)用Jar引用的最佳實(shí)踐

    在?Spring?Boot?項(xiàng)目開(kāi)發(fā)中,Maven?是最常用的構(gòu)建工具之一,通過(guò)?Maven,我們可以輕松地管理項(xiàng)目所需的依賴(lài),而,隨著項(xiàng)目的復(fù)雜化,無(wú)用的?Jar?包引用可能會(huì)逐漸增多,本文旨在詳細(xì)解析如何在?Spring?Boot?項(xiàng)目中剔除無(wú)用的?Jar?引用,需要的朋友可以參考下
    2025-01-01
  • Java學(xué)生信息類(lèi)繼承與接口的原理及使用方式

    Java學(xué)生信息類(lèi)繼承與接口的原理及使用方式

    這篇文章主要介紹了Java學(xué)生信息類(lèi)繼承與接口的原理及使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 使用Maven打包、發(fā)布、配置版本號(hào)命令

    使用Maven打包、發(fā)布、配置版本號(hào)命令

    在軟件開(kāi)發(fā)過(guò)程中,打包和發(fā)布是關(guān)鍵步驟,本文介紹了如何在打包和發(fā)布時(shí)跳過(guò)測(cè)試,如何指定項(xiàng)目版本號(hào),以及如何指定配置文件,提供了實(shí)用的技巧和方法,希望對(duì)開(kāi)發(fā)者有所幫助
    2024-09-09
  • IDEA?code?template配置和參數(shù)方式

    IDEA?code?template配置和參數(shù)方式

    這篇文章主要介紹了IDEA?code?template配置和參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教<BR>
    2024-01-01
  • Java實(shí)現(xiàn)的傅里葉變化算法示例

    Java實(shí)現(xiàn)的傅里葉變化算法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的傅里葉變化算法,結(jié)合具體實(shí)例形式分析了基于Java的傅里葉變化算法定義與使用相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06

最新評(píng)論

九龙城区| 奉贤区| 辽中县| 玛多县| 城口县| 府谷县| 宁国市| 甘德县| 绵竹市| 锦屏县| 绿春县| 水城县| 保山市| 乡城县| 普宁市| 都匀市| 武穴市| 杭锦旗| 浪卡子县| 陆丰市| 吉水县| 乐平市| 马山县| 宁海县| 三穗县| 漳浦县| 板桥市| 湟源县| 铅山县| 洛扎县| 张北县| 常宁市| 垣曲县| 婺源县| 宜都市| 闵行区| 张家界市| 玉屏| 梧州市| 五原县| 平潭县|