Java8中函數式接口與Lambda表達式的特性-創新互聯

今天就跟大家聊聊有關Java8中函數式接口與Lambda表達式的特性,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

創新互聯公司從2013年成立,是專業互聯網技術服務公司,擁有項目網站建設、成都做網站網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元衡南做網站,已為上家服務,為衡南各地企業和個人服務,聯系電話:028-86922220

什么是Lambda表達式,java8為什么使用Lambda表達式?

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

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

Lambda表達式的基本語法和格式

基本語法

  • java8中引入了新的操作符”->”,稱為箭頭操作符或者lambda操作符,箭頭操作符將lambda拆分為兩部分,左側:lambda表達式的參數列表,右側:lambda表達式中的所需要執行的的功能(接口實現的功能代碼)。

  • lambda表達式需要“函數式接口”的支持,接口中只有一個抽象方法的接口稱為函數式接口,可以使用注解@FunctionalInterface檢查接口是否是函數式接口。

  • lambda表達式的參數列表的數據類型可以省略不寫,因為jvm編輯器可以通過上下文判斷。

  • 基本格式

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

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

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

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

③ 有多個參數,并且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));

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

函數式接口是什么?

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

Java8內置函數式接口

四大核心函數式接口

函數式接口方法參數類型返回類型作用
Consumer<T> 消費型接口void accept(T t)Tvoid對T類型的參數進行操作
Supplier<T> 供給型接口T get()T操作數據,返回T類型的結果
Function<T, R> 函數型接口R apply(T t)TR對T類型參數進行操作,并返回R類型的結果
Predicate<T> 斷定型接口boolean test(T t)Tboolean確定T類型參數是否滿足某約束,并返回boolean值
//Consumer<T> 消費型接口
  @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> 函數性接口
  @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);
  }

其它函數式接口

函數式接口方法參數類型返回類型作用
BiFunction<T , U, R >R apply(T t, U u)T, UR對 T, U 類型的參數進行操作,并返回R類型的結果
UnaryOperator<T> (Function 子接口)T apply(T t)TT對 T類型的參數進行一元運算,并返回R對象的結果
BinaryOperato<T,R> (BiFunction 子接口) )T apply(T t1, T t2T, TT對T類型的參數進行二元運算,并返回T類型的結果
BiConsumer<T, U>void accept(T t, U u)T, Uvoid對T,作
ToIntToIntFunction<T> ToLongFunction<T> ToDoubleFunction<T&gtint(long,double) applyAsInt(T value)Tint, long, double計 算 int 、 long 、double值的函數
IntFunction<R> LongFunction<R> DoubleFunction<R>R apply(int(long,double) value)int, long, doubleR參數分別為int、long、double 類型的函數

看完上述內容,你們對Java8中函數式接口與Lambda表達式的特性有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注創新互聯行業資訊頻道,感謝大家的支持。

網頁名稱:Java8中函數式接口與Lambda表達式的特性-創新互聯
轉載源于:http://m.kartarina.com/article12/cdcjgc.html

成都網站建設公司_創新互聯,為您提供營銷型網站建設、建站公司、網站內鏈網站收錄網站建設域名注冊

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

商城網站建設
主站蜘蛛池模板: 亚洲精品无码专区2| 亚洲AV无码专区国产乱码不卡| 最新亚洲人成无码网www电影| 无码国模国产在线观看| 亚洲伊人成无码综合网| 无码免费一区二区三区免费播放 | 无码任你躁久久久久久老妇| 免费无码又爽又刺激网站| 久久精品国产亚洲AV无码娇色| 永久免费AV无码网站在线观看| 免费A级毛片无码A∨中文字幕下载| 小12箩利洗澡无码视频网站| 久久久久久亚洲Av无码精品专口| 日韩精品无码一区二区视频| 在线观看成人无码中文av天堂| 狠狠躁天天躁中文字幕无码| 免费无码看av的网站| 午夜无码熟熟妇丰满人妻| 国产aⅴ无码专区亚洲av| 真人无码作爱免费视频| 激情无码亚洲一区二区三区 | 亚洲精品无码久久久久YW| 中文字幕人妻无码一夲道| 亚洲一级特黄大片无码毛片| 国产精品亚洲专区无码WEB | 亚洲av午夜国产精品无码中文字| 无码一区二区三区在线观看| 亚洲一区二区三区AV无码| 国产精品无码DVD在线观看| 亚洲AV无码之日韩精品| 国产成人无码精品久久久露脸| 毛片无码一区二区三区a片视频| 999久久久无码国产精品| 未满小14洗澡无码视频网站| 亚洲av中文无码乱人伦在线咪咕| 国产精品成人无码久久久久久| 亚洲精品无码av天堂| 熟妇人妻中文av无码| 亚洲av永久无码精品国产精品| 无码av免费一区二区三区| 国产精品久久久久无码av|