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

淺析Java8新特性Lambda表達(dá)式和函數(shù)式接口

 更新時間:2017年08月02日 15:55:26   作者:我不是李大俠  
Lambda表達(dá)式理解為是 一段可以傳遞的代碼。最直觀的是使用Lambda表達(dá)式之后不用再寫大量的匿名內(nèi)部類,簡化代碼,提高了代碼的可讀性

什么是Lambda表達(dá)式,java8為什么使用Lambda表達(dá)式?

“Lambda 表達(dá)式”(lambda expression)是一個匿名函數(shù),Lambda表達(dá)式基于數(shù)學(xué)中的λ演算得名,直接對應(yīng)于其中的lambda抽象(lambda abstraction),是一個匿名函數(shù),即沒有函數(shù)名的函數(shù)。我們可以把 Lambda表達(dá)式理解為是 一段可以傳遞的代碼。最直觀的是使用Lambda表達(dá)式之后不用再寫大量的匿名內(nèi)部類,簡化代碼,提高了代碼的可讀性。

  // 啟動一個線程,不使用Lambda表達(dá)式
  new Thread(new Runnable() {
    @Override
    public void run() {
      System.out.println("啟動一個線程");
    }
  }).start();
  //使用Lambda表達(dá)式,只需要一行代碼
  new Thread(() -> System.out.println("啟動一個線程")).start();

Lambda表達(dá)式的基本語法和格式

基本語法

  • java8中引入了新的操作符”->”,稱為箭頭操作符或者lambda操作符,箭頭操作符將lambda拆分為兩部分,左側(cè):lambda表達(dá)式的參數(shù)列表,右側(cè):lambda表達(dá)式中的所需要執(zhí)行的的功能(接口實(shí)現(xiàn)的功能代碼)。
  • lambda表達(dá)式需要“函數(shù)式接口”的支持,接口中只有一個抽象方法的接口稱為函數(shù)式接口,可以使用注解@FunctionalInterface檢查接口是否是函數(shù)式接口。
  • lambda表達(dá)式的參數(shù)列表的數(shù)據(jù)類型可以省略不寫,因?yàn)閖vm編輯器可以通過上下文判斷。
  • 基本格式

① 無參數(shù),無返回值。( ) -> System.out.println(“hello”)

  // 實(shí)現(xiàn)Runnable接口(無參,無返回)
  Runnable r = () -> System.out.println("hello lambda");

② 一個參數(shù)(小括號可以省略不寫,習(xí)慣上加上小括號),無返回值。(x) -> System.out.println(x)

  //Consumer接口(一個參數(shù),無返回值),之后會提到
  //第一種,小括號不省略
  Consumer<String> c = (x) -> System.out.print(x);
  c.accept("hello");
  //小括號省略
  Consumer<String> c1 = x -> System.out.print(x);
  c1.accept("hello")

③ 有多個參數(shù),并且lambda有多條語句,則lambda語句必須用大括號括起來并有return返回(若有一條語句則可以省略大括號和return),有返回值。(x,y) ->{System.out.println(“hello”);return Integer.compare(x, y);};

//Comparator接口
  //多條語句
  Comparator<Integer> comparator = (x,y) ->{
    System.out.println("hello");
    return Integer.compare(x, y);
  };
  //一條語句
  Comparator<Integer> comparator2 = (x,y) -> Integer.compare(x, y);
  System.out.println(comparator2.compare(23, 22));

還有其他的一些格式都是大同小異,這里就不再了解。

函數(shù)式接口是什么?

在前面也提到了函數(shù)接口,那么函數(shù)接口到底是什么呢?是個接口,只包含一個抽象方法,那么它就是函數(shù)式接口,我們可以在任意函數(shù)式接口上使用 @FunctionalInterface 檢查它是否是一個函數(shù)式接口。
函數(shù)式接口里是可以包含默認(rèn)方法、靜態(tài)方法,他們不是抽象方法;也可以包含Java.lang.Object里的public方法,因?yàn)槿魏我粋€類都繼承Object類,包含了來自java.lang.Object里對這些抽象方法的實(shí)現(xiàn),也不屬于抽象方法;函數(shù)式接口里允許子接口繼承多個父接口,但每個父接口中都只能存在一個抽象方法,且必須的相同的抽象方法。

Java8內(nèi)置函數(shù)式接口

四大核心函數(shù)式接口

函數(shù)式接口 方法 參數(shù)類型 返回類型 作用
Consumer<T> 消費(fèi)型接口 void accept(T t) T void 對T類型的參數(shù)進(jìn)行操作
Supplier<T> 供給型接口 T get() T 操作數(shù)據(jù),返回T類型的結(jié)果
Function<T, R> 函數(shù)型接口 R apply(T t) T R 對T類型參數(shù)進(jìn)行操作,并返回R類型的結(jié)果
Predicate<T> 斷定型接口 boolean test(T t) T boolean 確定T類型參數(shù)是否滿足某約束,并返回boolean值

//Consumer<T> 消費(fèi)型接口
  @Test
  public void test1(){
    Consumer<String> c = (x) -> System.out.println("hello:"+x+"!");
    c.accept("Java");
  }
  // Supplier<T> 供給型接口
  @Test
  public void test2(){
    Supplier<String> s = () -> "hello,beautiful girl";
    String str = s.get();
    System.out.println(str);
  }
  //Function<T,R> 函數(shù)性接口
  @Test
  public void test3(){
    Function<String, Integer> f= (x) -> x.length();
    Integer len = f.apply("hello");
    System.out.println(len);
  }
  //Predicate<T> 斷言型接口
  @Test
  public void test4(){
    Predicate<String> p = (x) -> x.length()>5;
    boolean b = p.test("hello Java");
    System.out.println(b);
  }

其它函數(shù)式接口

函數(shù)式接口 方法 參數(shù)類型 返回類型 作用
BiFunction<T , U, R > R apply(T t, U u) T, U R 對 T, U 類型的參數(shù)進(jìn)行操作,并返回R類型的結(jié)果
UnaryOperator<T> (Function 子接口) T apply(T t) T T 對 T類型的參數(shù)進(jìn)行一元運(yùn)算,并返回R對象的結(jié)果
BinaryOperato<T,R> (BiFunction 子接口) ) T apply(T t1, T t2 T, T T 對T類型的參數(shù)進(jìn)行二元運(yùn)算,并返回T類型的結(jié)果
BiConsumer<T, U> void accept(T t, U u) T, U void 對T,作
ToIntToIntFunction<T> ToLongFunction<T> ToDoubleFunction<T&gt int(long,double) applyAsInt(T value) T int, long, double 計(jì) 算 int 、 long 、double值的函數(shù)
IntFunction<R> LongFunction<R> DoubleFunction<R> R apply(int(long,double) value) int, long, double R 參數(shù)分別為int、long、double 類型的函數(shù)

總結(jié)

以上所述是小編給大家介紹的Java8新特性Lambda表達(dá)式和函數(shù)式接口,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Spring Boot中RabbitMQ自動配置的介紹、原理和使用方法

    Spring Boot中RabbitMQ自動配置的介紹、原理和使用方法

    本文介紹了Spring Boot中RabbitMQ自動配置的介紹、原理和使用方法,通過本文的介紹,我們希望讀者能夠更好地理解Spring Boot中RabbitMQ的使用方法,并在項(xiàng)目中更加靈活地應(yīng)用,感興趣的朋友跟隨小編一起看看吧
    2023-07-07
  • java中使用@Transactional會有哪些坑

    java中使用@Transactional會有哪些坑

    在Java中,@Transactional是一個常用的注解,用于聲明方法應(yīng)該在一個事務(wù)的上下文中執(zhí)行,本文主要介紹了java中使用@Transactional會有哪些坑,感興趣的可以了解一下
    2024-04-04
  • Java截取字符串的方法

    Java截取字符串的方法

    這篇文章主要介紹了Java截取字符串的方法,實(shí)例分析了java中substring方法的使用技巧,需要的朋友可以參考下
    2015-05-05
  • SpringBoot實(shí)現(xiàn)redis緩存菜單列表

    SpringBoot實(shí)現(xiàn)redis緩存菜單列表

    本文主要介紹了SpringBoot實(shí)現(xiàn)redis緩存菜單列表,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java靜態(tài)static關(guān)鍵字原理詳解

    Java靜態(tài)static關(guān)鍵字原理詳解

    這篇文章主要介紹了Java靜態(tài)static關(guān)鍵字原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • Java單測void類型的方法詳解

    Java單測void類型的方法詳解

    這篇文章主要給大家介紹了Java中單測void類型的方法,文中給出了詳細(xì)的示例代碼,相信對大家的理解和學(xué)習(xí)具有一定的參考借鑒價值,需要的朋友可以跟著小編下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-01-01
  • 一起來學(xué)習(xí)Java的棧和隊(duì)列

    一起來學(xué)習(xí)Java的棧和隊(duì)列

    這篇文章主要為大家詳細(xì)介紹了Java的棧和隊(duì)列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • MyBatis執(zhí)行SQL的兩種方式小結(jié)

    MyBatis執(zhí)行SQL的兩種方式小結(jié)

    本文主要介紹了MyBatis執(zhí)行SQL的兩種方式小結(jié),主要包括SqlSession 發(fā)送SQL和SqlSession獲取Mapper接口,通過Mapper接口發(fā)送SQL,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • SpringBoot實(shí)現(xiàn)根據(jù)手機(jī)號獲取歸屬地

    SpringBoot實(shí)現(xiàn)根據(jù)手機(jī)號獲取歸屬地

    這篇文章主要為大家詳細(xì)介紹了SpringBoot如何實(shí)現(xiàn)根據(jù)手機(jī)號獲取歸屬地,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Java給JFrame窗口設(shè)置熱鍵的方法實(shí)現(xiàn)

    Java給JFrame窗口設(shè)置熱鍵的方法實(shí)現(xiàn)

    這篇文章主要介紹了Java給JFrame窗口設(shè)置熱鍵的方法實(shí)現(xiàn),文中通過示例代碼以及圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論

常州市| 公安县| 宝兴县| 石屏县| 淮滨县| 蒙阴县| 库尔勒市| 甘孜| 禹城市| 佛坪县| 贵阳市| 盘锦市| 长泰县| 朝阳市| 乾安县| 延川县| 青浦区| 陕西省| 唐山市| 乡城县| 江陵县| 秦皇岛市| 如东县| 汪清县| 海林市| 德惠市| 沽源县| 青海省| 鹤壁市| 合水县| 皮山县| 西乌珠穆沁旗| 蚌埠市| 黄龙县| 麦盖提县| 理塘县| 张家港市| 随州市| 白银市| 罗定市| 平昌县|