【只有光头才能变强,文末有xx】分享一波Lambda表达式

戳蓝字“CSDN云计算”关注我们哦!

640?wx_fmt=jpeg
作者 |  Java3y
责编 | 阿秃

前言
只有光头才能变强。

学了一下Java的函数式编程,给大家整理了一下,一起学习!

一、Lambda用法


之前写Optional这个类的时候,简单说了一下Lambda是怎么用的,这里再跟大家一起回顾一下,Lambda的语法是这样的:

640?wx_fmt=png


以Lambda语法创建线程和匿名内部类创建线程的区别(显然代码少了很多!):

public static void main(String[] args) {    // 用匿名内部类的方式来创建线程    new Thread(new Runnable() {        @Override        public void run() {            System.out.println("公众号:Java3y---关注我!");        }    });
// 使用Lambda来创建线程 new Thread(() -> System.out.println("公众号:Java3y---关注我!"));}

使用Lambda表达式,实际就是创建出该接口的实例对象。

640?wx_fmt=png
返回一个Runnable对象实例

图示,Runnable接口来举例:

640?wx_fmt=png
以Runnable接口为例

使用Labmda表达式需要函数式编程接口,比如在Runnable接口上我们可以看到@FunctionalInterface注解(标记着这个接口只有一个抽象方法)。

640?wx_fmt=png

函数式编程接口只有一个抽象方法


1.1 函数式编程接口


从上面的代码例子可以看出,我们使用Lambda表达式创建线程的时候,并不关心接口名,方法名,参数名。我们只关注他的参数类型,参数个数,返回值。

JDK原生就给我们提供了一些函数式编程接口方便我们去使用,下面是一些常用的接口:

640?wx_fmt=png
常用的函数式编程接口

简单说明一下:

  • 表格中的一元接口表示只有一个入参,二元接口表示有两个入参

    640?wx_fmt=png
    以BiFunction为例

    640?wx_fmt=png

    常用的函数式接口

Demo:

// Consumer 一个入参,无返回值Consumer<String> consumer = s-> System.out.println(s);consumer.accept("Java3y");
// Supplier 无入参,有返回值Supplier<String> supplier = () -> "Java4y";String s = supplier.get();System.out.println(s);
//.....

使用Lambda时,要记住的就两点:

  1. Lambda返回的是接口的实例对象
  2. 有没有参数、参数有多少个、需不需要有返回值、返回值的类型是什么---->选择自己合适的函数式接口


1.2 方法引用


在学Lambda的时候,还可能会发现一种比较奇怪的写法,例如下面的代码:

// 方法引用写法Consumer<String> consumer = System.out::println;consumer.accept("Java3y");如果按正常Lambda的写法可能是这样的:// 普通的Lambda写法Consumer<String> consumer = s -> System.out.println(s);consumer.accept("Java3y");

显然使用方法引用比普通的Lambda表达式又简洁了一些。

如果函数式接口的实现恰好可以通过调用一个方法来实现,那么我们可以使用方法引用:

640?wx_fmt=png

函数式接口的实现恰好可以通过调用一个方法来实现

方法引用又分了几种:

  • 静态方法的方法引用
  • 非静态方法的方法引用
  • 构造函数的方法引用

方法引用Demo:

public class Demo {    public static void main(String[] args) {        // 静态方法引用--通过类名调用        Consumer<String> consumerStatic = Java3y::MyNameStatic;        consumerStatic.accept("3y---static");
//实例方法引用--通过实例调用 Java3y java3y = new Java3y(); Consumer<String> consumer = java3y::myName; consumer.accept("3y---instance");
// 构造方法方法引用--无参数 Supplier<Java3y> supplier = Java3y::new; System.out.println(supplier.get()); }}

class Java3y {    // 静态方法    public static void MyNameStatic(String name) {        System.out.println(name);    }
// 实例方法 public void myName(String name) { System.out.println(name); }
// 无参构造方法 public Java3y() { }}

结果如下:

640?wx_fmt=png
结果

最后


Lambda虽然代码看起来是简洁,但是如果复杂的话还是比较难看明白的。

在学习Lambda的时候,首先我们得知道有哪些常用函数式编程接口,这些函数式编程接口的有什么区别(参数个数、返回值类型)。

Lambda表达式返回的是接口对象实例,如果函数式接口的实现恰好可以通过调用一个方法来实现,那么我们可以使用方法引用来替代Lambda表达式。

最后再完整举个例子:
// Supplier是一个无入参带返回的值的函数式编程接口
// () -> new Java3y()这整句Lambda表达式,返回的是Supplier接口的实例。从Lambda表达式可以看出无参数,带返回值Supplier<Java3y> supplier = () -> new Java3y();
// 由于这个“() -> new Java3y()”Lambda表达式可以通过调用一个方法就实现了,那么我们可以优化成方法引用Supplier<Java3y> supplier2 = Java3y::new;


【叮叮当叮叮当??? 送书时间到】


今天送?这本微服务架构设计模式


世界十大软件架构师之一、Java开发者社区的意见领袖、微服务架构先驱Chris Richardson亲笔撰写,微服务实用落地指南。

涵盖44个架构设计模式,系统解决服务拆分、事务管理、查询和跨服务通信等难题。易宝支付CTO陈斌、PolarisTech 联合创始人蔡书、才云科技CEO张鑫等多位专家鼎力推荐。


640?wx_fmt=png

 

作者:[美]克里斯·理查森(Chris Richardson)


译者:喻勇


【老规矩,获赞最多得】在本文留言并分享至朋友圈即可。

小伙伴们,你们真的好冷漠,仿佛阿秃我不曾让你们开心过一样!

艾瑞巴蒂ball ball u ,让我看到你们的热情~!

本次活动明日上午9点半over 么哇


 But,未获奖的读者也可以长按识别二维码购买。


640?wx_fmt=png


640?wx_fmt=png

640?wx_fmt=jpeg

???特邀各路大大免费入驻CSDN啦,除云计算相关书籍免费赠送外,还有海量福利奥~详情戳?下方图片,么么哒~


640?wx_fmt=png


福利
扫描添加小编微信,备注“姓名+公司职位”,入驻【CSDN博客】,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


640?wx_fmt=jpeg

推荐阅读:

  • 【角度刁钻】如果把线程当作一个人来对待,秒懂
  • 华为表示年内没有推出搭载鸿蒙操作系统手机的计划;OpenStack或被抛弃?iPhone至少还要三年可苹果自研5G调制解调器……
  • 多模态人物识别技术及其在视频场景中的应用 | CSDN技术公开课

  • Python可视化解析MCMC
  • 40 岁编程经验 30 年!支付宝资深工程师的程序人生

  • 你是程序员小白 Or 大神?一图见分晓!
  • 5个理由告诉你, 区块链未必适合你的业务!

真香,朕在看了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521285.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

因为阿里,他们成了“杭漂”

摘要&#xff1a; 这是你吗——有人在回北京的飞机上赶时间写周报&#xff1b;有人全家在美国&#xff0c;孤身从硅谷回杭州工作&#xff1b;有人每周回北京为了赶末班飞机快速过安检&#xff0c;周末从不系皮带。 阿里正在从杭州走向全世界&#xff0c;也有越来越多的人才&am…

如何提高一个研发团队的“代码速度”?

摘要&#xff1a; 蚂蚁金服国际事业群技术风险部研究员南门&#xff0c;将和大家聊聊Code Velocity&#xff0c;希望能在团队效率问题方面&#xff0c;为你带来一些启发。 什么是代码速度&#xff08;Code Velocity&#xff09;&#xff1f; Code Velocity的定义是&#xff1…

多机器人路径规划的代码_知荐 | 地平线机器人算法工程师总结六大路径规划算法...

来源 | 知乎知圈 | 进“高精度地图社群”&#xff0c;请加微信15221054164&#xff0c;备注地图目录1 自主机器人近距离操作运动规划体系1.1 单个自主机器人的规划体系1.2 多自主机器人协同规划体系2 路径规划研究2.1 图搜索法2.1.1 可视图法2.1.2 Dijkstra算法2.1.3 A*算法2.2…

Kafka 监控 Kafka Eagle 图形化版本

文章目录一、Kafka Eagle 下载、编译流程1. Kafka Eagle下载2. 解压Kafka Eagle3. 进入解压的目录4. 编译项目5. 添加编译环境6. 运行脚本编译项目二、Kafka Eagle 正式配置流程2.1. 进入编译获得web目录2.2. 将编译后的tar解压到/app目录2.3. 在/app目录下面查看2.4. 配置文件…

一份关于如何为回归任务选择机器学习算法指南

摘要&#xff1a; 本文总结了一些针对于回归问题的机器学习方法&#xff0c;辩证地分析了其各自的优缺点&#xff0c;读者可以根据具体问题选择合适的机器学习算法以完成相应的任务。 当遇到任何类型的机器学习&#xff08;ML&#xff09;问题时&#xff0c;可能会有许多不同的…

博文强识|支付宝 App 是如何建设移动 DevOps 的?

作者 | 阿里云云栖社区转自 &#xff5c; CSDN企业博客责编 | 阿秃微软 MSDN 上的一篇文章有这样一段话&#xff1a;“移动应用的理想环境需要满足两个条件&#xff0c;一是可以确切知道客户脑海中立即浮现的需求&#xff0c;二是为了满足这些需求而编写的代码可以立即传递给这…

第一个将Palette Mode引入VVC(H.266),阿里云在JVET会议上引起关注

从应用需求出发&#xff0c;帮助标准组织制定出更贴近云端业务需求的标准 视频压缩标准是一个重要且深具挑战的研究方向。从过去的存储到当前的网络带宽&#xff0c;视频标准每一代的更新进步对科技应用都有很大的影响。但同时随着几十年来的发展&#xff0c;视频压缩标准的效…

kafka集群下载、启动、部署、测试

文章目录一、kafka基础操作1. kafka下载2. 解压3. 重命名4. 在kafka目录下创建 data 数据文件夹5. 修改配置文件6. 配置kafka环境变量7. 刷新环境变量&#xff0c;使之生效二、kafka集群操作2.1. 分发配置好的基础安装包2.2. 登录ly-02服务器&#xff0c;修改配置文件2.3. 登录…

零基础学python难_0基础学python有多难

相对于其他编程语言来说&#xff0c;Python并不是很难&#xff0c;入门简单&#xff0c;容易上手&#xff0c;对于零基础的人来说&#xff0c;入门Python是不难的&#xff0c;但是想要学精学通&#xff0c;则要花费一定的时间和精力。Python是主流的编程语言&#xff0c;应用性…

修改HBase的rowkey设计把应用的QPS从5W提升到50W

摘要&#xff1a; 正确设计Hbase的rowkey可以让你的应用飞起来&#xff0c;前提是你需要了解一些Hbase的存储机制。 UTT是Aliexpress的营销消息运营平台&#xff0c;运营希望促销活动时APP消息推送的QPS达到34W。 UTT刚接入APP消息推送时&#xff0c;QPS只能达到5W&#xff0…

BDTC 2019 | 15场分论坛,10分钟速览,5折票优惠,烧脑模式开启

2019中国大数据技术大会&#xff08;BDTC&#xff09;5折优惠票限时抢购啦&#xff0c;学生票仅售599元&#xff01;扫描上图二维码或登录官网&#xff08;https://t.csdnimg.cn/KSTh&#xff09;了解更多最新大会详情。近日&#xff0c;在组委会公布大会部分重磅讲师和前沿议题…

我需要一个高并发的架构,我的系统要改造成微服务吗

摘要&#xff1a; 最近大家都在谈微服务&#xff0c;随着越来越多的在线业务需要提供更大并发的scale-up 和 scale out能力&#xff0c;微服务确实提供了比较好分布式服务的解决方案。 阿里云高级解决方案架构师 杨旭 世界最大混合云的总架构师&#xff0c;4年前&#xff0c;开…

python工作目录_Python目录的基本操作

一、任务描述 本实验任务主要对Python目录进行一些基本操作&#xff0c;通过完成本实验任务&#xff0c;要求学生熟练掌握Python目录的基本操作&#xff0c;并对Python目录的基本操作进行整理并填写工作任务报告。 二、任务目标 1、掌握Python目录的操作 三、任务环境 Ubuntu16…

【建议收藏】数据中心服务器基础知识大全

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | Hardy责编 | 阿秃服务器对每个从事IT工作的人来说并不陌生&#xff0c;但是服务器所涉及的各种知识细节&#xff0c;并非大家都十分清楚&#xff0c;为了让大家深入了解服务器的关键知识点&#xff0c;笔者特意抽时间总结了…

一文了解阿里云CDN HTTP2.0

摘要&#xff1a; 本文由阿里视频云高级技术专家空见撰写&#xff0c;主要介绍HTTP2.0的历史、特性、如何使用和使用之后的性能对比验证。 背景介绍 要了解HTTP2.0&#xff0c;先了解一下HTTP超文本传输协议的历史&#xff08;HyperText Transfer Protocol&#xff09;&#…

VMVare 虚拟机使用桥接模式

VMVare 虚拟机使用桥接模式&#xff0c;和物理机使用同一个物理网卡&#xff0c;和物理主机使用同一个段的ip。 文章目录1. VMware 编辑 > 虚拟网络编辑器2. 更改配置3. 编辑名称为VMnet0 的网络4. 编辑虚拟机的网络适配器5. 编辑虚拟机的网络适配器6. 再启动虚拟机1. VMwar…

阿里云基于NVM的持久化高性能Redis数据库

摘要&#xff1a; 背景 Redis作为一款简洁、高效的开源K/V数据库&#xff0c;可以被用于内存缓存、持久化存储等不同场景&#xff0c;大量服务于各类互联网应用。同时也提供了丰富的功能配置&#xff0c;客户可以根据各自业务需求&#xff0c;在读写性能、缓存容量、数据可靠性…

rgss加密文件解包器_Unity AssetBundle高效加密案例分享

这是侑虎科技第585篇文章&#xff0c;感谢作者江鱼供稿。欢迎转发分享&#xff0c;未经作者授权请勿转载。如果您有任何独到的见解或者发现也欢迎联系我们&#xff0c;一起探讨。&#xff08;QQ群&#xff1a;793972859&#xff09;作者主页&#xff1a;https://www.zhihu.com/…

阿里云DTS大幅降价,低至400元即可获得实现秒级延迟的数据传输服务

为了释放更多技术红利&#xff0c;进一步普惠广大客户和开发者&#xff0c;阿里云7月上旬宣布数据传输服务(Data Transmission Service,简称DTS) 数据同步功能降价&#xff0c;最高降价幅度高达40%。中国大陆&#xff0c;最低单价低至400元/月&#xff0c;跨境专线同步&#xf…

【又是一波重点】深度解析服务器科普知识 | CSDN博文精选

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | Hardy晗狄转自 &#xff5c; CSDN博客责编 | 阿秃服务器是网络数据的节点和枢纽&#xff0c;是一种高性能计算机&#xff0c;存储、处理网络上80&#xff05;的数据、信息&#xff0c;负责为网络中的多个客户端用户同时提供信…