欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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á)式,這類接口只定義了唯一的抽象方法的接口(除了隱含的Object對(duì)象的公共方法),一開始也稱SAM類型接口(Single Abstract Method)。

簡單使用

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

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

擴(kuò)展

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

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

以 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 注解注釋,以申明該接口是一個(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類似,這里就不舉例了

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)文章

  • MyBatis-Plus QueryWrapper及LambdaQueryWrapper的使用詳解

    MyBatis-Plus QueryWrapper及LambdaQueryWrapper的使用詳解

    這篇文章主要介紹了MyBatis-Plus QueryWrapper及LambdaQueryWrapper的使用詳解,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • java:try...catch跳過異常繼續(xù)處理循環(huán)問題

    java:try...catch跳過異常繼續(xù)處理循環(huán)問題

    這篇文章主要介紹了java:try...catch跳過異常繼續(xù)處理循環(huán)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 解決springboot 連接 mysql 時(shí)報(bào)錯(cuò) using password: NO的方案

    解決springboot 連接 mysql 時(shí)報(bào)錯(cuò) using password: NO的方案

    在本篇文章里小編給大家整理了關(guān)于解決springboot 連接 mysql 時(shí)報(bào)錯(cuò) using password: NO的方案,有需要的朋友們可以學(xué)習(xí)下。
    2020-01-01
  • java調(diào)用未知類的指定方法簡單實(shí)例

    java調(diào)用未知類的指定方法簡單實(shí)例

    這篇文章介紹了java調(diào)用未知類的指定方法簡單實(shí)例,有需要的朋友可以參考一下
    2013-09-09
  • java 讀取文件路徑空格、

    java 讀取文件路徑空格、"+"和中文的處理方法

    今天小編就為大家分享一篇java 讀取文件路徑空格、"+"和中文的處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • SpringBoot中使用@Value注解注入詳解

    SpringBoot中使用@Value注解注入詳解

    這篇文章主要介紹了SpringBoot中的@Value注入詳解,在SpringBoot中,@Value注解可以注入一些字段的普通屬性,并且會(huì)自動(dòng)進(jìn)行類型轉(zhuǎn)換,本文對(duì)這些類型進(jìn)行總結(jié),需要的朋友可以參考下
    2023-08-08
  • Java編程思想對(duì)象的容納實(shí)例詳解

    Java編程思想對(duì)象的容納實(shí)例詳解

    這篇文章主要介紹了Java編程思想對(duì)象的容納實(shí)例詳解,內(nèi)容比較詳細(xì),涵蓋的東西也比較多,具有參考價(jià)值,需要的朋友了解下。
    2017-09-09
  • Spring MVC注解式開發(fā)示例完整過程

    Spring MVC注解式開發(fā)示例完整過程

    這篇文章主要介紹了Spring MVC注解式開發(fā)示例完整過程,MVC注解式開發(fā)即處理器基于注解的類開發(fā),對(duì)于每一個(gè)定義的處理器,無需在xml中注冊(cè),只需在代碼中通過對(duì)類與方法的注解,即可完成注冊(cè)
    2023-02-02
  • 解決IDEA顯示非法字符 \ufeff 的問題

    解決IDEA顯示非法字符 \ufeff 的問題

    這篇文章主要介紹了解決IDEA顯示非法字符 \ufeff 的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • idea git未提交代碼文件名字變色(圖解)

    idea git未提交代碼文件名字變色(圖解)

    這篇文章主要介紹了idea git未提交代碼文件名字變色,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04

最新評(píng)論