當前位置:編程學習大全網 - 編程語言 - java 8 新特性中p->p.setLastName("Doe"));

java 8 新特性中p->p.setLastName("Doe"));

這是lambda表達式,也就是匿名函數,對於

persons.forEach(p->p.setLastName("Doe"));

這句代碼,persons是壹個list,forEach是壹個內部叠代的方法,p->p.setLastName("Doe")是壹個匿名函數對象。

這個語句等價於

for (Person p : persons) {

p.setLastName("Doe");

}

但是用for循環是外部叠代,速度略慢。

p->p.setLastName("Doe")

p是指list當中取出的對象,p可以自己定義,妳寫a也可以,相應的就要變成

a->a.setLastName("Doe")

->是lambda表達式的符號,->左邊的對象去傳入lambda函數體p.setLastName("Doe"),是前面傳入的p去調用setLastName方法,如果要調用多個方法,那麽方法體要用花括號包含

例如persons.forEach(p->{

p.setLastName("Doe")

System.out.println(p);

});

綜上所述

persons.forEach(p->p.setLastName("Doe"));

是把p->p.setLastName("Doe");這個函數對象,給了persons的叠代器,讓叠代器用這個函數去對集合中的每壹個對象使用

有了lambda,妳可以這樣定義壹個新的線程

new Thread(() -> {System.out.println("hello word!");}).start();

() -> {System.out.println("hello word!");}這句語句其實就是runnable接口的實現對象,

編譯器會根據函數需要實現的接口去隱式轉換,Thread的構造方法需要傳遞Runnable接口的實現類,所以new Thread(() -> {System.out.println("hello word!");}).start();相當於

new Thread((Runnable)() -> {System.out.println("hello word!");}).start();

其中()是匹配接口中的無參函數,因為Runnable接口中run方法為無參所以是()

->指明前面是傳入參數,後面是函數體

有了lambda就能寫出更加漂亮的代碼,以及更少的工作量,實現壹個方法的接口用匿名內部類的話看起來是冗余代碼了

純手打望采納

  • 上一篇:混料設計重心法和格點法怎麽區分
  • 下一篇:Java 從網頁抽取數據 存入數據庫
  • copyright 2024編程學習大全網