方法引用讓你可以重複使用現有的方法定義,並向lambda一樣傳遞它們。在一些情況下,比起使用lambda表示式,它們似乎更易讀,感覺也更自然。
方法引用可以被看作僅僅呼叫特定方法的lambda的一種快捷寫法。
它的基本思想是,如果乙個lambda代表的只是「直接呼叫這個方法」,那最好還是用名稱來呼叫它,而不是去描述如何呼叫它。事實上,方法引用就是讓你根據已有的方法實現來建立lambda表示式。但是,顯式地指明方法的名稱,你的**的可讀性會更好。
可以把方法引用看作針對僅僅單一方法的lambda的語法糖,因為你表達同樣的事情時要寫的**更少了。
方法引用主要有三類:
類似於string::length的的第二種方法引用的思想就是你在引用乙個物件的方法。但第三種方法引用指的是,你在lambda中呼叫乙個已經存在的外部物件中的方法。例如,lambda表示式()->expensivetransaction.getvalue()可以寫作expensivetransaction::getvalue。
只要方法引用的簽名和介面對應的上就可以。可以通過型別指向靜態方法或例項方法。還可以通過例項指向方法。
//無參的建構函式
//等價於
//有乙個引數的建構函式
建構函式引用的語法始終是classname::new,但需要與建構函式引用的簽名匹配的函式式介面。 java8 lambda表示式方法引用
比圖integer intvalue,作為函式傳遞。這就是方法引用 當使用function作為方法引數時,如下 public r map functionfunction 呼叫該方法的時候,傳遞的是integer.intvalue的方法引用,如下 lambdatestlambdatest new l...
java8 Lambda表示式的使用
lambda表示式表達更為簡潔,但是效率並不比原來高,多用於多執行緒中簡化頻繁使用的匿名內部類函式。lambda表示式並非所有場景都適用。下面介紹lambda的使用,首先定義乙個介面 inte ce ilike 作為比較,首先先介紹其他的方式實現介面,首先建乙個測試類,其中分別實現介面 public...
Java8之Lambda表示式
intstream.range 1000,10000 filter v v 1000 v 1000 v 1000 v 100 v 100 v 100 v 10 v 10 v 10 v foreach system.out println 上面的表示式中多處用到lamnda表示式以及stream ap...