为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 1650 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信