溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

lambda 的入門詳解

發(fā)布時(shí)間:2020-08-10 15:19:07 來源:ITPUB博客 閱讀:125 作者:ckxllf 欄目:編程語(yǔ)言

  1.為什么用lambda

  簡(jiǎn)化我們的操作

  舉個(gè)例子

  創(chuàng)建一個(gè)線程

  new Thread(new Runnable() {

  @Override

  public void run() {

  System.out.println("hh");

  }

  }).start();

  以前我們快速創(chuàng)建一個(gè)線程要這樣

  現(xiàn)在用lambda

  new Thread(()-> System.out.println("lambda-->hh")).start();

  一個(gè)更重要的原因是Java 以后為了更好的函數(shù)式編程

  2.lambda怎么用

  2.1 lambda的使用場(chǎng)景

  lambda只能用在函數(shù)式接口,函數(shù)式接口就是一個(gè)接口里面只有一個(gè)抽象方法

  * @author Arthur van Hoff

  * @see java.lang.Thread

  * @see java.util.concurrent.Callable

  * @since JDK1.0

  */

  @FunctionalInterface

  public interface Runnable {

  /**

  * When an object implementing interface Runnable is used

  * to create a thread, starting the thread causes the object's

  * run method to be called in that separately executing

  * thread.

  *

  * The general contract of the method run is that it may

  * take any action whatsoever.

  *

  * @see java.lang.Thread#run()

  */

  public abstract void run();

  }

  可以通過@FunctionalInterface來表示是一個(gè)函數(shù)式接口

  Java 為我們創(chuàng)建了很多常用的函數(shù)式接口,不用我們一個(gè)一個(gè)來創(chuàng)建

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

  Consumer< T > 消費(fèi)性 接口: void accept(T t);

  Supplier< T > 供給型接口 : T get();

  Function< T , R > 函數(shù)式接口 : R apply (T t);

  Predicate< T > 斷言形接口 : boolean test(T t);

  2.2 使用

  (參數(shù))->{方法體}

  new Thread(()-> { System.out.println("lambda-->hh");}).start();

  其實(shí)到這就可以熟練的用lambda,但是它還能簡(jiǎn)化,你說氣不氣=。=

  1.一個(gè)參數(shù)時(shí)可省略()

  Consumer consumer = x -> System.out.println(x);

  consumer.accept("1個(gè)參數(shù)省略()");

  2.方法體只有一條語(yǔ)句省略{}

  == 不管它是否需要有返回值==

  Function function= x-> x;

  Integer apply = function.apply(1);

  System.out.println(apply);

  3.類型推斷

  lambda 表達(dá)式的參數(shù)類型可省略不寫

  聰明的你肯定發(fā)現(xiàn)了為什么參數(shù) 不需要寫類型,為什么不需要,Java會(huì)根據(jù)泛型來推斷

  你也可以指定參數(shù)的類型,但是沒必要

  Consumer consumer = (String x) -> System.out.println(x);

  3.方法引用

  System.out.println("呼呦呦");

  public void println(String x) {

  synchronized (this) {

  print(x);

  newLine();

  } 鄭州人流醫(yī)院哪家好 http://mobile.zhongyuan120.com/

  }

  println是一個(gè)參數(shù)沒有返回

  這和Consumer 消費(fèi)者接口很符合啊,下面這樣寫可不可以簡(jiǎn)化啊(就nm事多)

  Consumer consumer = x -> System.out.println(x);

  簡(jiǎn)化版

  Consumer consumer1 = System.out::println;

  方法引用 參數(shù)與返回值需要一致

  /**

  * 方法引用 如果lambda體中有方法已經(jīng)實(shí)現(xiàn),我們可以使用 方法引用 參數(shù)與返回值需要一致

  *

  * 主要有3種

  * 對(duì)象::實(shí)例方法

  * 類::靜態(tài)方法

  * 類::實(shí)例方法

  *

  * 構(gòu)造器引用

  * 調(diào)用的構(gòu)造方法與傳入的參數(shù)有關(guān)

  *

  * 數(shù)組引用

  * Type[]:new;

  */

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI