lambda 的入門詳解

ckxllf發表於2020-04-08

  1.為什麼用lambda

  簡化我們的操作

  舉個例子

  建立一個執行緒

  new Thread(new Runnable() {

  @Override

  public void run() {

  System.out.println("hh");

  }

  }).start();

  以前我們快速建立一個執行緒要這樣

  現在用lambda

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

  一個更重要的原因是Java 以後為了更好的函數語言程式設計

  2.lambda怎麼用

  2.1 lambda的使用場景

  lambda只能用在函式式介面,函式式介面就是一個介面裡面只有一個抽象方法

  * @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來表示是一個函式式介面

  Java 為我們建立了很多常用的函式式介面,不用我們一個一個來建立

  四大內建函式式介面

  Consumer< T > 消費性 介面: void accept(T t);

  Supplier< T > 供給型介面 : T get();

  Function< T , R > 函式式介面 : R apply (T t);

  Predicate< T > 斷言形介面 : boolean test(T t);

  2.2 使用

  (引數)->{方法體}

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

  其實到這就可以熟練的用lambda,但是它還能簡化,你說氣不氣=。=

  1.一個引數時可省略()

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

  consumer.accept("1個引數省略()");

  2.方法體只有一條語句省略{}

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

  Function function= x-> x;

  Integer apply = function.apply(1);

  System.out.println(apply);

  3.型別推斷

  lambda 表示式的引數型別可省略不寫

  聰明的你肯定發現了為什麼引數 不需要寫型別,為什麼不需要,Java會根據泛型來推斷

  你也可以指定引數的型別,但是沒必要

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

  3.方法引用

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

  public void println(String x) {

  synchronized (this) {

  print(x);

  newLine();

  } 鄭州人流醫院哪家好

  }

  println是一個引數沒有返回

  這和Consumer 消費者介面很符合啊,下面這樣寫可不可以簡化啊(就nm事多)

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

  簡化版

  Consumer consumer1 = System.out::println;

  方法引用 引數與返回值需要一致

  /**

  * 方法引用 如果lambda體中有方法已經實現,我們可以使用 方法引用 引數與返回值需要一致

  *

  * 主要有3種

  * 物件::例項方法

  * 類::靜態方法

  * 類::例項方法

  *

  * 構造器引用

  * 呼叫的構造方法與傳入的引數有關

  *

  * 陣列引用

  * Type[]:new;

  */


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69945560/viewspace-2685049/,如需轉載,請註明出處,否則將追究法律責任。

相關文章