lambda表示式
函式式程式設計思想:lambda的格式:物件導向: 必須通過物件的形式來做事情.
函式式思想: 強調做什麼( 注重結果 ) , 而不是怎麼做.
●一些引數 ( ) 介面中的抽象方法的引數,有就寫上,沒有空著lambda表示式的省略格式:●乙個箭頭 - > 傳遞:把引數傳遞給{}中的方法體
●一段** 重寫介面中的抽象方法的方法體
標準格式:
(引數型別 引數名稱) ‐>
lambda表示式的省略格式:**如下:a.( ):( )中的引數,資料型別是可以省略的 (int a,int b)–>(a,b)
b.( ):( )中如果只有乙個引數,那麼型別和()都可以省略 (int a)–>a
注意:如果沒有引數()不能省略
c.: ()中方法體,如果只有一行**那麼 return ;都可以省略
注意:必須3個一起省略
// 匿名內部類的寫法.
new thread(new runnable() ).start();
// lambda表示式的寫法
new thread( () -> system.out.println("多執行緒任務執行!") ).start();
lambda的前提條件:
使用lambda必須具有介面,且要求介面中有且僅有乙個抽象方法。(函式式介面)函式式介面:有且僅有乙個抽象方法的介面.必須具有上下文推導。
也就是方法的引數或區域性變數型別必須為lambda對應的介面型別
使用: 函式介面必須作為方法的引數使用
@functionalinte***ce: // 用來檢測乙個介面是否為函式式介面
public
inte***ce myfunctionalinte***ce
常用的函式式介面:
1.supplier: 生產資料抽象方法: t get(): 獲取乙個泛型引數指定型別的資料.
// 建立乙個方法 , supplier介面作為方法引數型別 ,
public
static integer getmax(suppliers)
public
static
void
main(string args) );
system.out.println(name);
}
2.consumer: 消費資料抽象方法: void accept(t t): 消費乙個指定泛型的資料.
預設方法: andthen(): 連線兩個介面
public
static
void
main(string args) ,"老王");
}// 定義乙個方法 , 函式介面consumer 作為引數 .
public
static
void
printstring(consumercon , string s)
/*3.function介面:用於進行資料型別轉換
抽象方法:
*/public
class demo01_function );
}// 建立乙個方法 , function函式介面作為引數 .
public
static
void
recever(string s , functionfun)
}
4.predicate介面:對某種型別的資料進行判斷.抽象方法: test(t t) 判斷.
預設方法: and == &&
or == ||
negate == !
public
class demo01predicate );
}// 定義乙個方法 , predicate介面作為引數
public
static
void
checkstring(string s , predicatep)
}
jdk1 8新特性 Lambda表示式
要了解lambda表示式,我們先來說說函式式介面 函式式介面 介面中只有乙個抽象方法 有預設方法和靜態方法不影響 lambda表示式就是為了解決函式式介面而誕生的,可以先看乙個例子來了解 現在我們要實現下面介面的drive功能,我們能怎麼做呢?inte ce drive 1.通過一般類實現介面來重寫...
JDK1 8的新特性
jdk1.8之前的介面不可以有方法體,但從jdk1.8開始,介面中的方法可以帶有方法體為什麼要新增這個特性?介面就是為了定義乙個標準,這個標準要求所有的實現類實現這些抽象方法。但存在某些方法,所有的實現類 都是一樣的,索性就把這些 挪到介面中。使用的方法?通過default來修飾這個方法public...
JDK1 8新特性簡介
可以用static default來定義介面方法 用default來定義普通方法,這樣子類就不用強制覆寫這個方法了。用static來定義靜態方法 專給lanmda使用的介面加上annotation functionalinte ce 其中只能有乙個方法 使用 引數 程式執行語句 引數 簡單返回 引數...