自己對Lambda表示式的理解

2021-10-10 07:48:29 字數 1348 閱讀 9996

lambda表示式其實是乙個簡寫的匿名內部類

而之所以能簡寫到僅僅一行**就能實現功能是由於一定的約束條件

總所周知,想要用匿名內部類,就要實現內部類的抽象方法。

而如果乙個類有兩個以上的抽象方法時,由於無法定位方法,就無法進行進一步的縮寫

所以 lambda表示式的乙個要求就是 抽象方法只有乙個,那麼簡寫的方法一定是這個類的抽象方法,所以方法名 修飾符 這些就可以完全省略了

然後 由於只有乙個抽象方法 , 所以引數也固定為對應的引數 我們使用map.foreach 如下示例

default

void

foreach

(biconsumer<

?super k,

?super v> action)

catch

(illegalstateexception ise)

action.

accept

(k, v);}

}

map的foreach 方法 的引數 是乙個物件 ,這個物件裡面只有乙個 accept 的抽象方法 , 所以我們完全可以使用 匿名內部類重寫 accept方法 ,並使用 lambda 表示式進行簡化

map

rqumap =

newhashmap

<

>()

;map

resmap =

newhashmap

<

>()

;rqumap.

foreach

((k,v)

->

);

而這裡 由於只有乙個抽象方法,所以這裡 (k , v) 其實就是 匿名內部類裡重寫的accept方法 的引數,還是之前說過的 , 由於只有乙個抽象方法,所以能精確定位到 對應的方法,就能省略很多的東西

我們這裡實現的 accept 就是列印 傳入的 k ,v 那麼,在foreach 方法裡 ,k 就是map 的鍵 v 就是map的值 , 所以 accpet 最後的效果就是列印 map的鍵值

我們也可以將 accept 方法 這麼實現, 將值放入到另外乙個map裡面

rqumap.

foreach

((k,v)

->

);

然後 由於 accept 方法的引數 和 put 的引數一致,我們可以更簡化 , 使用::表示呼叫方法,則:

rqumap.

foreach

(resmap:

:put)

;

最後可以簡化成這個樣子。

這就是lambda表示式之美。

lambda表示式 lambda表示式

1.概述 c 11 中的 lambda 表示式用於定義並建立匿名的函式物件,以簡化程式設計工作。lambda 的語法形式如下 函式物件引數 操作符過載函式引數 mutable 或 exception 宣告 返回值型別可以看到,lambda 主要分為五個部分 函式物件引數 操作符過載函式引數 muta...

程式理解Lambda表示式

include pch.h include using namespace std intmain cout 測試 2 定義乙個變數來接收匿名函式 endl auto x x cout 測試 3 匿名函式的返回值 endl int cout 測試 4 匿名函式的返回值預設推導 endl cout 測...

如何理解Lambda表示式

lambda 表示式 lambda expression 是乙個匿名函式,lambda表示式基於數學中的 演算得名,直接對應於其中的lambda抽象 lambda abstraction 是乙個匿名函式,即沒有函式名的函式。lambda表示式可以表示閉包。這裡就展示了lambda是如何從其他表現形式...