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

Java8之lambda表達(dá)式基本語(yǔ)法

 更新時(shí)間:2017年08月11日 10:35:12   投稿:mrr  
本文通過(guò)示例大家給大家介紹了java8之lambda表達(dá)式的基本語(yǔ)法,感興趣的的朋友一起看看吧

lambda表達(dá)式,即帶有參數(shù)的表達(dá)式,為更清晰地理解lambda表達(dá)式,先看如下例子:

(1)

class Student{
  private String name;
  private Double score;
  public Student(String name, Double score) {
    this.name = name;
    this.score = score;
  }
  public String getName() {
    return name;
  }
  public Double getScore() {
    return score;
  }
  public void setName(String name) {
    this.name = name;
  }
  public void setScore(Double score) {
    this.score = score;
  }
  @Override
  public String toString() {
    return "{"
        + "\"name\":\"" + name + "\""
        + ", \"score\":\"" + score + "\""
        + "}";
  }
}
@Test
public void test1(){
  List<Student> studentList = new ArrayList<Student>(){
    {
      add(new Student("stu1",100.0));
      add(new Student("stu2",97.0));
      add(new Student("stu3",96.0));
      add(new Student("stu4",95.0));
    }
  };
  Collections.sort(studentList, new Comparator<Student>() {
    @Override
    public int compare(Student o1, Student o2) {
      return Double.compare(o1.getScore(),o2.getScore());
    }
  });
  System.out.println(studentList);
}

(1)中代碼調(diào)用Collections.sort方法對(duì)集合進(jìn)行排序,其中第二個(gè)參數(shù)是一個(gè)類,準(zhǔn)確地說(shuō)是一個(gè)匿名內(nèi)部類,sort方法調(diào)用內(nèi)部類中的compare方法對(duì)list進(jìn)行位置交換,因?yàn)閖ava中的參數(shù)類型只能是類或者基本數(shù)據(jù)類型,所以雖然傳入的是一個(gè)Comparator類,但是實(shí)際上需要傳遞的僅僅是compare方法,lambda表達(dá)式專門針對(duì)只有一個(gè)方法的接口(即函數(shù)式接口),Comparator就是一個(gè)函數(shù)式接口 

@FunctionalInterface
public interface Comparator<T> {
  int compare(T o1, T o2);
}

@FunctionalInterface的作用就是標(biāo)識(shí)一個(gè)接口為函數(shù)式接口,此時(shí)Comparator里只能有一個(gè)抽象方法。

使用lambda表達(dá)式之后(1)中的代碼改造如下

(2)

public void test1_(){
    List<Student> studentList = new ArrayList<Student>(){
      {
        add(new Student("stu1",100.0));
        add(new Student("stu2",97.0));
        add(new Student("stu3",96.0));
        add(new Student("stu4",95.0));
      }
    };
    Collections.sort(studentList,(s1,s2)-> Double.compare(s1.getScore(),s2.getScore()));
    System.out.println(studentList);
  }

對(duì)于有多個(gè)參數(shù)的情況,語(yǔ)法:

     1. ambda表達(dá)式的基本格式為(x1,x2)->{表達(dá)式...};

     2. 在上式中,lambda表達(dá)式帶有兩個(gè)參數(shù),因此兩邊的括號(hào)不能省略,而參數(shù)類型可以省略

     3. 如果表達(dá)式只有一行,那么表達(dá)式兩邊的花括號(hào)可以省略

另外一個(gè)常見(jiàn)的例子是新建一個(gè)線程,不使用lambda表達(dá)式的寫法為

(3)

public void testThread(){
    new Thread(new Runnable() {
      @Override
      public void run() {
        System.out.println("hello, i am thread!");
      }
    }).start();
  }

其中Runnable接口也是一個(gè)函數(shù)式接口,源碼如下

@FunctionalInterface
public interface Runnable {
  /**
   * When an object implementing interface <code>Runnable</code> is used
   * to create a thread, starting the thread causes the object's
   * <code>run</code> method to be called in that separately executing
   * thread.
   * <p>
   * The general contract of the method <code>run</code> is that it may
   * take any action whatsoever.
   *
   * @see   java.lang.Thread#run()
   */
  public abstract void run();
}

將其轉(zhuǎn)換為lambda表達(dá)式的寫法為

(4)

public void testThread_(){
  new Thread(()-> System.out.println("hello, i am thread!")).start();
}

對(duì)于沒(méi)有參數(shù)的情況 ,語(yǔ)法:

     1.參數(shù)的括號(hào)不能省略,如果只有一句的表達(dá)式則可省略花括號(hào)和語(yǔ)句結(jié)尾的分號(hào)

我們構(gòu)造一個(gè)只有一個(gè)參數(shù)的函數(shù)式接口

@FunctionalInterface
public interface MyFunctionalInterface {
  public void single(String msg);
}
/**
 * 需要單個(gè)參數(shù)
 */
public static void testOnePar(MyFunctionalInterface myFunctionalInterface){
  myFunctionalInterface.single("msg");
}
/**
   * 一個(gè)參數(shù),可以省略參數(shù)的括號(hào)
   */
  @Test
  public void testOneParameter(){
    testOnePar(x-> System.out.println(x));
  }

對(duì)于只有一個(gè)參數(shù)的情況 ,語(yǔ)法:

     1.參數(shù)的括號(hào)可以省略

在這里我們?yōu)榱搜菔局挥幸粋€(gè)參數(shù)的情況自己創(chuàng)建了一個(gè)函數(shù)式接口,其實(shí)java8中已經(jīng)為我們提供了很多常見(jiàn)的函數(shù)式接口

常見(jiàn)的有

Function:提供任意一種類型的參數(shù),返回另外一個(gè)任意類型返回值。 R apply(T t);

Consumer:提供任意一種類型的參數(shù),返回空值。 void accept(T t);

Supplier:參數(shù)為空,得到任意一種類型的返回值。T get();

Predicate:提供任意一種類型的參數(shù),返回boolean返回值。boolean test(T t);

因此針對(duì)上面的情況,我們可以直接使用Consumer類,

/**
   * 需要單個(gè)參數(shù)
   */
  public static void testOnePar1(Consumer unaryOperator){
    unaryOperator.accept("msg");
  }

總結(jié)

以上所述是小編給大家介紹的使用Java8之lambda表達(dá)式基本語(yǔ)法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java計(jì)算數(shù)學(xué)表達(dá)式代碼詳解

    Java計(jì)算數(shù)學(xué)表達(dá)式代碼詳解

    這篇文章主要介紹了Java計(jì)算數(shù)學(xué)表達(dá)式代碼詳解,具有一定借鑒價(jià)值,需要的朋友可以了解下。
    2017-12-12
  • JavaWeb入門:ServletContext詳解和應(yīng)用

    JavaWeb入門:ServletContext詳解和應(yīng)用

    這篇文章主要介紹了Java ServletContext對(duì)象用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-07-07
  • SpringBoot集成Solr實(shí)現(xiàn)全文檢索功能

    SpringBoot集成Solr實(shí)現(xiàn)全文檢索功能

    solr是一個(gè)現(xiàn)成的全文檢索引擎系統(tǒng), 放入tomcat下可以獨(dú)立運(yùn)行, 對(duì)外通過(guò)http協(xié)議提供全文檢索服務(wù),這篇文章給大家介紹了SpringBoot集成Solr實(shí)現(xiàn)全文檢索功能,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2024-03-03
  • SpringBoot實(shí)現(xiàn)滑塊驗(yàn)證碼驗(yàn)證登陸校驗(yàn)功能詳解

    SpringBoot實(shí)現(xiàn)滑塊驗(yàn)證碼驗(yàn)證登陸校驗(yàn)功能詳解

    驗(yàn)證碼作為一種自然人的機(jī)器人的判別工具,被廣泛的用于各種防止程序做自動(dòng)化的場(chǎng)景中。傳統(tǒng)的字符型驗(yàn)證安全性已經(jīng)名存實(shí)亡的情況下,各種新型的驗(yàn)證碼如雨后春筍般涌現(xiàn),今天給大家分享一篇SpringBoot實(shí)現(xiàn)滑塊驗(yàn)證碼
    2022-09-09
  • Java創(chuàng)建表格實(shí)例詳解

    Java創(chuàng)建表格實(shí)例詳解

    這篇文章主要介紹了Java創(chuàng)建表格實(shí)例詳解,需要的朋友可以參考下。
    2017-09-09
  • Spring Transaction事務(wù)實(shí)現(xiàn)流程源碼解析

    Spring Transaction事務(wù)實(shí)現(xiàn)流程源碼解析

    此文就Spring 事務(wù)實(shí)現(xiàn)流程進(jìn)行源碼解析,我們可以借此對(duì)Spring框架更多一層理解,下面以xml形式創(chuàng)建一個(gè)事務(wù)進(jìn)行分析
    2022-09-09
  • 關(guān)于阿里巴巴TransmittableThreadLocal使用解讀

    關(guān)于阿里巴巴TransmittableThreadLocal使用解讀

    文章主要介紹了三種ThreadLocal的使用:ThreadLocal、InheritableThreadLocal和TransmittableThreadLocal,ThreadLocal和InheritableThreadLocal在單線程和部分情況下可以正常工作,但TransmittableThreadLocal在處理線程池時(shí)表現(xiàn)更佳
    2025-02-02
  • Springboot實(shí)現(xiàn)多數(shù)據(jù)源切換詳情

    Springboot實(shí)現(xiàn)多數(shù)據(jù)源切換詳情

    這篇文章主要介紹了Springboot實(shí)現(xiàn)多數(shù)據(jù)源切換詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的朋友可以參考一下
    2022-09-09
  • 探討Java 將Markdown文件轉(zhuǎn)換為Word和PDF文檔

    探討Java 將Markdown文件轉(zhuǎn)換為Word和PDF文檔

    這篇文章主要介紹了Java 將Markdown文件轉(zhuǎn)換為Word和PDF文檔,本文通過(guò)分步指南及代碼示例展示了如何將 Markdown 文件轉(zhuǎn)換為 Word 文檔和 PDF 文件,需要的朋友可以參考下
    2024-07-07
  • Servlet編程第一步之從零構(gòu)建Hello?World應(yīng)用詳細(xì)步驟+圖解

    Servlet編程第一步之從零構(gòu)建Hello?World應(yīng)用詳細(xì)步驟+圖解

    本文詳細(xì)介紹了Servlet和maven的基本概念及其在JavaWeb開(kāi)發(fā)中的應(yīng)用,首先解釋了Servlet是一個(gè)在服務(wù)器上處理請(qǐng)求的Java程序,然后介紹了maven作為管理和構(gòu)建Java項(xiàng)目的工具,需要的朋友可以參考下
    2024-10-10

最新評(píng)論

长葛市| 松潘县| 九龙城区| 杭锦旗| 永丰县| 永德县| 拉萨市| 隆尧县| 天门市| 师宗县| 红原县| 唐河县| 荆门市| 分宜县| 汪清县| 清水河县| 奇台县| 阿克苏市| 北安市| 大方县| 和平县| 扶余县| 香港| 永登县| 越西县| 鄂伦春自治旗| 盐边县| 资兴市| 浮山县| 无棣县| 同心县| 四平市| 修武县| 龙州县| 乌鲁木齐市| 望城县| 盱眙县| 固阳县| 东丰县| 吉安市| 淮北市|