亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

淺談Java 8 新增函數式接口到底是什么

2024-07-14 08:43:25
字體:
來源:轉載
供稿:網友

從 Java 8 開始便出現了函數式接口(Functional Interface,以下簡稱FI)

定義為: 如果一個接口只有唯一的一個抽象接口,則稱之為函數式接口。為了保證接口符合 FI ,通常會在接口類上添加 @FunctionalInterface 注解。理解了函數式接口可以為 Java 函數式編程打下基礎,最終可通過運用函數式編程極大地提高編程效率。

函數式接口 (Functional Interface) 就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的接口。

函數式接口可以對現有的函數友好地支持 lambda。

JDK 1.8 之前已有的函數式接口:

  • java.lang.Runnable
  • java.util.concurrent.Callable
  • java.security.PrivilegedAction
  • java.util.Comparator
  • java.io.FileFilter
  • java.nio.file.PathMatcher
  • java.lang.reflect.InvocationHandler
  • java.beans.PropertyChangeListener
  • java.awt.event.ActionListener
  • javax.swing.event.ChangeListener

JDK 1.8 新增加的函數接口:

  • java.util.function

網上很多教程說新增 4 個函數接口是不對的,java.util.function 它包含了很多類,用來支持 Java的 函數式編程,該包中的函數式接口 43 個,但是最主要的是這四個:

(1)功能性接口:Function<T,R>
(2)斷言性接口:Predicate<T>
(3)供給性接口:Supplier<T>
(4)消費性接口:Consumer<T>

詳細一點介紹:

 

函數式接口 參數類型 返回類型 用途
Consumer T void 對類型T參數操作,無返回結果,包含方法 void accept(T t)
Supplier T 返回T類型參數,方法時 T get()
Function T R 對類型T參數操作,返回R類型參數,包含方法 R apply(T t)
Predicate T boolean 斷言型接口,對類型T進行條件篩選操作,返回boolean,包含方法 boolean test(T t)

 

具體的使用:

/** * Java8內置的四大核心函數式接口: * Consumer<T>:消費型接口</T> * Supplier<T>供給型接口</T> * Function<T,R>函數型接口</T,R> * Predicate<T>段言型接口</T> * boolean test(T t) */public class TestLamda3 {  //Consumer<T>  @Test  public void test1(){    happy(10000,(m)-> System.out.println("這次消費了"+m+"元"));  }  public void happy(double money, Consumer<Double> con){    con.accept(money);  }  //Supplier<T>  @Test  public void test2(){   List<Integer> list=  getNumList(5,()->{      return (int)Math.random()*100;    });   list.forEach(System.out::println);  }  public List<Integer> getNumList(int num, Supplier<Integer> supplier){     List<Integer> list=new ArrayList<>();     for (int i=0; i<num;i++){       Integer n=supplier.get();       list.add(n);     }     return list;  }  //函數式接口  @Test  public void test4(){     String newStr=strHandle("/t/t/t woshi nide ",(str)->str.trim());     System.out.println(newStr);  }  public String strHandle(String str,Function<String,String> fun){   return fun.apply(str);  }  //段言型接口;將滿足條件的字符串放入集合中  @Test  public void test5(){    List<String> list1= Arrays.asList("nihao","hiehei","woai","ni");    List<String> list=filterStr(list1,(s)->s.length()>3);    for (String s : list) {      System.out.println(s);    }  }  public List<String> filterStr(List<String> list, Predicate<String> pre){    List<String> strings=new ArrayList<>();    for (String string : list) {      if(pre.test(string)){        strings.add(string);      }    }    return strings;  }}

 全部接口:

 

序號 接口 & 描述
1 BiConsumer<T,U>

代表了一個接受兩個輸入參數的操作,并且不返回任何結果

2 BiFunction<T,U,R>

代表了一個接受兩個輸入參數的方法,并且返回一個結果

3 BinaryOperator<T>

代表了一個作用于于兩個同類型操作符的操作,并且返回了操作符同類型的結果

4 BiPredicate<T,U>

代表了一個兩個參數的boolean值方法

5 BooleanSupplier

代表了boolean值結果的提供方

6 Consumer<T>

代表了接受一個輸入參數并且無返回的操作

7 DoubleBinaryOperator

代表了作用于兩個double值操作符的操作,并且返回了一個double值的結果。

8 DoubleConsumer

代表一個接受double值參數的操作,并且不返回結果。

9 DoubleFunction<R>

代表接受一個double值參數的方法,并且返回結果

10 DoublePredicate

代表一個擁有double值參數的boolean值方法

11 DoubleSupplier

代表一個double值結構的提供方

12 DoubleToIntFunction

接受一個double類型輸入,返回一個int類型結果。

13 DoubleToLongFunction

接受一個double類型輸入,返回一個long類型結果

14 DoubleUnaryOperator

接受一個參數同為類型double,返回值類型也為double 。

15 Function<T,R>

接受一個輸入參數,返回一個結果。

16 IntBinaryOperator

接受兩個參數同為類型int,返回值類型也為int 。

17 IntConsumer

接受一個int類型的輸入參數,無返回值 。

18 IntFunction<R>

接受一個int類型輸入參數,返回一個結果 。

19 IntPredicate

接受一個int輸入參數,返回一個布爾值的結果。

20 IntSupplier

無參數,返回一個int類型結果。

21 IntToDoubleFunction

接受一個int類型輸入,返回一個double類型結果 。

22 IntToLongFunction

接受一個int類型輸入,返回一個long類型結果。

23 IntUnaryOperator

接受一個參數同為類型int,返回值類型也為int 。

24 LongBinaryOperator

接受兩個參數同為類型long,返回值類型也為long。

25 LongConsumer

接受一個long類型的輸入參數,無返回值。

26 LongFunction<R>

接受一個long類型輸入參數,返回一個結果。

27 LongPredicate

R接受一個long輸入參數,返回一個布爾值類型結果。

28 LongSupplier

無參數,返回一個結果long類型的值。

29 LongToDoubleFunction

接受一個long類型輸入,返回一個double類型結果。

30 LongToIntFunction

接受一個long類型輸入,返回一個int類型結果。

31 LongUnaryOperator

接受一個參數同為類型long,返回值類型也為long。

32 ObjDoubleConsumer<T>

接受一個object類型和一個double類型的輸入參數,無返回值。

33 ObjIntConsumer<T>

接受一個object類型和一個int類型的輸入參數,無返回值。

34 ObjLongConsumer<T>

接受一個object類型和一個long類型的輸入參數,無返回值。

35 Predicate<T>

接受一個輸入參數,返回一個布爾值結果。

36 Supplier<T>

無參數,返回一個結果。

37 ToDoubleBiFunction<T,U>

接受兩個輸入參數,返回一個double類型結果

38 ToDoubleFunction<T>

接受一個輸入參數,返回一個double類型結果

39 ToIntBiFunction<T,U>

接受兩個輸入參數,返回一個int類型結果。

40 ToIntFunction<T>

接受一個輸入參數,返回一個int類型結果。

41 ToLongBiFunction<T,U>

接受兩個輸入參數,返回一個long類型結果。

42 ToLongFunction<T>

接受一個輸入參數,返回一個long類型結果。

43 UnaryOperator<T>

接受一個參數為類型T,返回值類型也為T。

 

總結

函數式接口 (Functional Interface) 就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的接口。

函數式接口是為了 lambda 表達式服務,函數式接口的存在是 lambda 表達式出現的前提,lambda 表達式想關于重寫了函數式接口中的唯一方法。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲电影免费在线观看| 国产精品福利观看| 日韩欧美亚洲一二三区| 欧美成人一区在线| 亚洲成人激情视频| 亚洲r级在线观看| 欧美疯狂xxxx大交乱88av| 欧美日韩国产91| 精品高清一区二区三区| 日韩电影在线观看中文字幕| 欧美性猛交xxxxx免费看| 久久成人国产精品| 欧美激情亚洲精品| 97超碰国产精品女人人人爽| 欧美电影免费观看网站| 欧美日韩国产综合视频在线观看中文| 欧美一级大片在线免费观看| 久久久久久尹人网香蕉| 久久影院资源网| 一区二区三区亚洲| 国产精品免费电影| 亚洲护士老师的毛茸茸最新章节| 国产精品一区二区三区免费视频| 日韩免费在线观看视频| 麻豆一区二区在线观看| 青青草精品毛片| 日产精品99久久久久久| 欧美第一黄色网| 按摩亚洲人久久| 久久五月天色综合| 亚洲精品一区中文| 中文字幕亚洲一区二区三区五十路| 欧美在线一级视频| 国产精品精品久久久久久| 亚洲国产第一页| 久久久国产视频91| 91久久精品视频| 一区国产精品视频| 九九精品视频在线观看| 91精品久久久久久久久中文字幕| 最近日韩中文字幕中文| 欧美激情久久久久| 精品国产乱码久久久久久天美| 精品视频久久久| 色综合天天综合网国产成人网| 国a精品视频大全| 精品精品国产国产自在线| 久久免费视频在线| 青青在线视频一区二区三区| 最近2019中文字幕大全第二页| 国产欧美日韩精品专区| 中日韩午夜理伦电影免费| 欧美日韩国产综合新一区| 亚洲国产精品va在线| 亚洲黄色成人网| 日韩av不卡在线| 亚洲欧美国产高清va在线播| 欧美xxxx做受欧美.88| 欧美成人激情视频免费观看| 欧美极品少妇与黑人| 国产亚洲精品一区二区| 日韩欧美在线免费| 国产精品电影一区| 九九综合九九综合| 欧美国产视频日韩| 亚洲一区二区三区毛片| 国产精品免费在线免费| 国产在线观看精品一区二区三区| 91av在线播放| 91香蕉嫩草影院入口| 最近中文字幕mv在线一区二区三区四区| 日本中文字幕久久看| 性欧美在线看片a免费观看| 亚洲乱码av中文一区二区| 国产精品高潮呻吟久久av无限| 国产一区二区精品丝袜| 日本久久久久久久久久久| 亚洲精品久久久一区二区三区| 亚洲精品成人免费| 亚洲网站在线播放| 亚洲影院色无极综合| 国产精品电影网| 日本欧美爱爱爱| 久久久国产精品免费| 亚洲国产精品系列| 成人性生交xxxxx网站| 欧美成人在线免费| 亚洲福利在线播放| 亚洲美女在线视频| 热re99久久精品国产66热| 国产精品美女久久久久av超清| 欧美一级淫片aaaaaaa视频| 国外成人性视频| 国产午夜精品美女视频明星a级| 97视频在线观看免费高清完整版在线观看| 亚洲免费中文字幕| 国产精品盗摄久久久| 国外色69视频在线观看| 国产福利精品av综合导导航| 91精品视频在线播放| 911国产网站尤物在线观看| 久久影院资源站| zzjj国产精品一区二区| 日韩精品在线观看网站| 这里只有精品在线观看| 国产精品高清在线观看| 亚洲精品v天堂中文字幕| 91视频88av| 日韩小视频在线| 欧美极品少妇全裸体| 欧美成人午夜剧场免费观看| 久久精品国产亚洲7777| 亚洲人成电影在线观看天堂色| 久久久久久久久电影| 久久久99久久精品女同性| 欧美裸体xxxx极品少妇| 日韩av手机在线看| 国产精品白嫩初高中害羞小美女| 国产精品永久在线| 爱福利视频一区| 亚洲欧美在线看| 久久久久国产精品www| 日韩精品极品在线观看| 91精品免费久久久久久久久| 亚洲国产欧美一区二区三区同亚洲| 亚洲精品永久免费精品| 国产午夜精品免费一区二区三区| 亚洲精品久久视频| 欧美综合国产精品久久丁香| 狠狠躁天天躁日日躁欧美| 欧美性生交大片免费| 国产美女主播一区| 色综合亚洲精品激情狠狠| 欧美午夜片在线免费观看| 国产精品视频精品| 91视频88av| 国产欧美一区二区白浆黑人| 中文字幕亚洲国产| 欧美日韩另类视频| 国产精品一区二区3区| 久久久久久久久久久人体| 亚洲精品永久免费| 久久久久久久爱| 亚洲人午夜精品| 亚洲精品日韩激情在线电影| 亚洲视频一区二区三区| 久久99亚洲热视| 国内精品美女av在线播放| 国产香蕉精品视频一区二区三区| 国产成人中文字幕| 亚洲欧美日韩中文在线制服| 国产有码在线一区二区视频| 欧美肥臀大乳一区二区免费视频| 国产精品一区二区女厕厕| 成人福利视频在线观看| 日韩有码在线视频| 日本精品久久电影| 亚洲变态欧美另类捆绑| 久久久精品2019中文字幕神马| 国产精品第2页| 日本午夜人人精品| 国产精品88a∨| 亚洲国产精品热久久| 久久国产视频网站|