亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

lamdba表達式

lamdba表達式

fenkapian 2017-06-19 19:12:16
public?int?addCombinationSku(CombinationSku?combinationSku)?{ ????logger.debug("addCombinationSku?and?combinationSku?:{}",?combinationSku); ????List<String>?list?=?combinationSkuMapper.querySkuIdWithAdd(combinationSku); ????if?(!CollectionUtils.isEmpty(list))?{ ????????if?(list.stream().filter(id?->?id.equals(combinationSku.getSkuId())).count()?!=?0)?{ ????????????return?0; ????????} ????} ????return?combinationSkuMapper.addCombinationSku(combinationSku); }麻煩解讀下這方法,lambda表達式好難,看不懂
查看完整描述

2 回答

已采納
?
onemoo

TA貢獻883條經驗 獲得超454個贊

你這個例子中 lambda 表達式就是這個部分: id?-> id.equals(combinationSku.getSkuId())


lambda 表達式的語法是:(參數...) -> 語句或語句塊。 如果參數只有一個,那參數列表的括號可以省略。

lambda 表達式的功能是:它接受這些參數,在執行時會執行 -> 后面的語句或語句塊。 所以這個 lambda 表達式會接受 id 作參數(id 是參數名,先別管參數類型是什么),并且在執行時就執行?id.equals(combinationSku.getSkuId()) 這條語句,表達式的返回值也就是該語句的返回值。


這個 lambda 用在 filter() 中。filter 的參數是一個過濾條件,filter 把這個過濾條件應用到每個 stream 的元素上,然后 filter 會返回滿足過濾條件的子 stream。 ?而這個過濾條件要求輸入的是元素,返回的是判斷后的 boolean?結果(true代表通過了過濾)。

這里這個過濾條件就是用 lambda 表達式來表示的。lambda 中的 id 就代表每次判斷時的元素,而 lambda 執行的具體代碼?id.equals(combinationSku.getSkuId()) 就是用于判斷的代碼。你可以看到這個代碼的返回類型就是 boolean,其代表了判斷結果。


對 lambda 表達式的詳解需要你理解 interface 及 functional interface,我不知道你學到它們了嗎?

不了解也沒關系,lambda 表達式的作用就是上面所說的,目前你知道 lambda 表達式可以這樣用就行了。

查看完整回答
反對 回復 2017-06-20
  • 2 回答
  • 2 關注
  • 1722 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號