前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >到底Lambda 和 函数式接口是什么关系?

到底Lambda 和 函数式接口是什么关系?

原创
作者头像
泽霖
发布2023-11-06 21:50:31
1360
发布2023-11-06 21:50:31
举报
文章被收录于专栏:分享技术分享技术

首先要明白一个道理,即 Lambda 他只是一种表达式语法,他在 Java 中,不是对象,不是对象,不是对象,只是一种语法。除了xxx → ... 这种箭头式的,像类名::方法名对象::方法名 这样的方法引用也是 Lambda 表达式,是一种语法,不是对象。

关系

Lambda表达式是不能直接使用的,需要初始化,而初始化要借助 函数式接口, Lambda表达式在初始化之前就是个语法,而在初始化之后,就是一个 函数式接口 的实例对象。

然后再讲一个弯弯绕,Lambda表达式?在被函数式接口初始化后可以成为一个对象. 在 Java 中,?类名::方法名?和?对象::方法名?也都是?Lambda表达式 。因此,?对象::方法名?也能被函数式接口初始化。在 Stream 中,函数式接口 是作为 Stream 中的方法参数来进行使用的,而函数式接口的实例对象,又是 Lambda 表达式借助函数式接口的初始化的结果。这样,就可以说明 Stream、函数表达式接口、Lambda 之间的协作关系了。

实例

代码语言:txt
复制
Stream<String> stream= Stream.of("I", "love", "you", "too");

stream.sorted((str1, str2) -> str1.length()-str2.length())

    .forEach(str -> System.out.println(str));

在上面的这个例子中就可以看到,sorted方法中的参数就是一个Lambda表达式 而这个方法的源码是这样定义的Stream<T> sorted(Comparator<? super T> comparator)

到目前位置,新特性也算是过了一遍了,看似简单的代码,越简单,背后的规则就越多。其实生活中,各处也都是这样的,就像点外卖一样,点一份外卖,其实背后就是一系列的规则和约束,简单的下单行为,背后是骑手和商家,按照心照不宣的约定来做着一系列我们并没有看见的行为,之后才能拿到我们点的餐。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关系
    • 实例
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    http://www.vxiaotou.com