保存您的lambda,以备不时之需-保存到文件

介绍

简短的帖子,描述了如何将Java lambda持久保存到文件中以在不同的过程中重复使用。

序列化Lambda

Java 8中引入的Lambda使函数成为Java语言的一等公民(几乎)。 它们消除了使用专用类来保存函数的需要。 但是,这是如何进行的呢?

实际上,javac劫持了包含函数的类,并添加了包含函数实现的静态方法。 函数调用站点被新添加的静态方法的调用替换。 有关lambda实现魔术的完整说明,请参见
文章 。

Oracle很有帮助地提供了SerializableLambda类,该类实现了lambda的可序列化形式,提供了足够的元信息来重建调用。 我们要做的就是将lambda转换为可序列化的,然后使用标准的标准机械来封送lambda。 以下是一些实用程序函数,用于对lambda进行序列化和反序列化。

public static <F extends Function & Serializable> void serialise(F f, String name) throws Exception {try (var oos = new ObjectOutputStream(new FileOutputStream(new File(name)))) {oos.writeObject(f);}
}public static <T, R, F extends Function<T, R>> F deserialise(String name) throws Exception {try (var ois = new ObjectInputStream(new FileInputStream(name))) {return (F) ois.readObject();}
}

在序列化函数中,我使用相交类型将函数转换为Serializable。 有一个带有测试主体的小项目
在这里演示序列化。 执行功能的主要方法:

public class Main {public static void main(String[] args) throws Exception {if (false) {serialise(s -> "hello - " + s, "func1");}System.out.println(deserialise("func1").apply("Greg"));//rewrite func-1serialise(s -> "goodbye - " + s, "func1");System.out.println(deserialise("func1").apply("Greg"));}public static <F extends Function & Serializable> void serialise(F f, String name) throws Exception {try (var oos = new ObjectOutputStream(new FileOutputStream(new File(name)))) {oos.writeObject(f);}}public static <T, R, F extends Function<T, R>> F deserialise(String name) throws Exception {try (var ois = new ObjectInputStream(new FileInputStream(name))) {return (F) ois.readObject();}}}

该项目的根目录中有一个序列化的lambda“ func-1”。 运行项目将看到func-1被覆盖,因此第二次执行将得到与第一次不同的结果:

第一次执行:

你好–格雷格

再见–格雷格

第二次执行:

再见–格雷格

再见–格雷格

希望您喜欢这篇小文章,并发现它有趣。

翻译自: https://www.javacodegeeks.com/2019/07/save-lambdas-rainy-day-save-file.html

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

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

相关文章

[渝粤教育] 西北工业大学 机械原理 参考 资料

教育 -机械原理-章节资料考试资料-西北工业大学【】 第一周单元测验 1、【单选题】手机属于。 A、机械 B、机构 C、机器 D、即不属机构&#xff0c;也不属机器 参考资料【 】 2、【单选题】下列常用装置哪些属于机器。 A、电动卷扬机 B、折叠烫衣板 C、手动窗扇开闭装置 D、汽车…

16槽双电源机架式光纤收发器产品优势介绍

双电源光纤收发器能满足远距离、高速、高宽带的快速以太网工作组用户的需要。产品性能稳定可靠&#xff0c;符合以太网标准&#xff0c;并具有防雷击保护措施。双电源光纤收发器适用于电信及各种宽带数据网要求高可靠性数据传输或组建IP数据传输专网的领域&#xff0c;是宽带校…

[渝粤教育] 西南交通大学 土木工程试验与量测技术 参考 资料

教育 -土木工程试验与量测技术-章节资料考试资料-西南交通大学【】 电阻应变片的粘贴及防潮工艺实验 1、【单选题】在测定石砌拱桥结构在车辆荷载作用下的应变时&#xff0c;最适合选用的应变传感器是&#xff08;&#xff09; A、电阻应变片 B、手持式应变仪 C、振弦式应变计 …

aws iam 架构图_使用IAM保护您的AWS基础架构

aws iam 架构图在开发新产品并发现合适的产品市场时&#xff0c;每个团队都需要快速行动。 尤其是初创公司&#xff0c;因为公司的整个未来都取决于快速找到为您的产品付款的人。 对于初创企业和其他团队来说&#xff0c; Amazon Web Services是令人难以置信的工具&#xff0c…

百兆光纤收发器和千兆光纤收发器的区别

百兆光纤收发器&#xff08;又名百兆光电转换器&#xff09;是一种快速以太网转换器。光纤收发器全面兼容IEEE802.3、IEEE802.3u、IEEE802.1d标准。支持全双工、半双工、自适应三种工作模式。 千兆光纤收发器&#xff08;又名光电转换器&#xff09;是一种快速以太网&#xff…

[渝粤教育] 西南石油大学 建设法规 参考 资料

教育 -建设法规-章节资料考试资料-西南石油大学【】 第一章单元小测 1、【单选题】法律关系产生的前提是( ) A、公民的法律意识 B、法律的存在 C、交易的发生 D、物的转移 参考资料【 】 2、【单选题】下列民事行为中属于代理的是&#xff08; &#xff09;。 A、由于事务繁忙&…

[渝粤教育] 西安建筑科技大学 环境规划与管理 参考 资料

教育 -环境规划与管理-章节资料考试资料-西安建筑科技大学【】 第一章单元测验 1、【单选题】1979年国家颁布了《中华人民共和国环境保护法&#xff08;试行&#xff09;》&#xff0c;( )实施了新的《环境保护法》 A、 2015年1月1日 B、2014年4月24日 C、 2015年4月24日 D、20…

常见光纤收发器组网方式介绍

在光纤网络布线中&#xff0c;光纤收发器的应用已经越来越普遍&#xff0c;仅需一芯光纤&#xff0c;便可组成一个环网&#xff0c;节约了布线成本&#xff0c;其中一个点出现故障&#xff0c;不影响其他点的使用。接下来我们就几种常见的光纤收发器组网方式进行简单的介绍&…

[渝粤教育] 郑州商学院 商学概论 参考 资料

教育 -商学概论-章节资料考试资料-郑州商学院【】 Chapter 1 单元测试 1、【单选题】_____ not only provide factors of production (or resources) but also consume goods and services. A、Suppliers B、Nonprofits C、Entrepreneurs D、Households 参考资料【 】 2、【单选…

[渝粤教育] 郑州航空工业管理学院 电工电子技术基础 参考 资料

教育 -电工电子技术基础-章节资料考试资料-郑州航空工业管理学院【】 小节测试 1、【判断题】任何一个完整的电路都必须有电源、负载和中间环节三个基本部分组成。 A、正确 B、错误 参考资料【 】 2、【判断题】电路的作用是对电能进行传输、分配和转换&#xff1b;而对电信号进…

工业级光电转换器产品介绍

光电转换器是一种类似于基带MODEM&#xff08;数字调制解调器&#xff09;的设备&#xff0c;和基带MODEM不同的是接入的是光纤专线&#xff0c;是光信号&#xff0c;分为全双工流控&#xff0c;半双工背压控制。那么&#xff0c;什么是工业级光电转换器呢&#xff1f;接下来就…

[渝粤教育] 重庆大学 电子商务 参考 资料

教育 -电子商务-章节资料考试资料-重庆大学【】 1.1 随堂测验 1、【单选题】狭义的电子商务的英文表达是&#xff1a; A、Electronic Commerce B、Electronic Business C、Electronic Government D、Electronic Banking 参考资料【 】 2、【单选题】狭义的电子商务不包括下面的…

工业级光纤收发器的选用方法

工业级光纤收发器又叫工业级光电转换器&#xff0c;是一种将短距离的双绞线电信号和长距离的光信号进行互换的以太网传输媒体转换单元。观察角度的不同使人们对工业级光纤收发器有着不同的认识&#xff0c;比如按传输速率分为单10M、100M的工业级光纤收发器、10/100M自适应的工…

[渝粤教育] 长沙民政职业技术学院 高职公共英语(一) 参考 资料

教育 -高职公共英语&#xff08;一&#xff09;-章节资料考试资料-长沙民政职业技术学院【】 Test 1 1、【单选题】You will find more opportunities in the new campus. A、chances B、times C、honors D、worries 参考资料【 】 2、【单选题】We were very astonished that …

java8 默认方法_Java 8的默认方法:可以做什么和不能做什么?

java8 默认方法什么是默认方法 在Java 8发行版中&#xff0c;您可以修改接口以添加新方法&#xff0c;以便该接口与实现该接口的类保持兼容。 万一您开发了一个库&#xff0c;该库将由基辅到纽约的几位程序员使用&#xff0c;那么这非常重要。 在Java 8出现之前&#xff0c;如果…

【渝粤教育】国家开放大学2018年春季 0609-22T中级财务会计(1) 参考试题

科目编号&#xff1a;0609 座位号 2017-2018学年度第二学期期末考试 中级财务会计&#xff08;1&#xff09; 试题 2018年 7 月 一、单选题&#xff08;本大题共10小题&#xff0c;每小题3分&#xff0c;共计30分&#xff09; &#xff08;★请考生务必将答案填入到下面对应序…

光纤模块和光纤收发器匹配问题

光纤收发器与光模块在很多光纤传输项目中都有用到&#xff0c;二者都是光电转换设备&#xff0c;通过光模块与光纤收发器的灵活搭配&#xff0c;可以构建多样化的网络结构。那么&#xff0c;光纤模块和光纤收发器连接时要注意什么呢&#xff1f;今天就由飞畅科技的小编来为大家…

【渝粤教育】国家开放大学2018年秋季 0239-21T电子商务物流管理 参考试题

试卷代码&#xff1a;0257 2018-2019学年度第一学期期末考试 高级英语听力&#xff08;1&#xff09;试题 2019年1月 注 意 事 项 一、将你的准考证号、学生证号、姓名及分校&#xff08;工作站&#xff09;名称填写在答题纸规定栏内。 考试结束后&#xff0c;把试卷和答题纸放…

【渝粤教育】国家开放大学2018年秋季 0699-21T阅读与写作 参考试题

科目编号&#xff1a;0703 座位号 □□ 2018-2019学年度第一学期期末考试 经济学基础 试题 2019年1月 一、单项选择题&#xff1a;&#xff08;每题4分&#xff0c;共40分&#xff09; 一个经济体系必须回答的基本问题&#xff08; &#xff09; A&#xff0e;生产什么&#…

大模型系列之模型参数冻结

第一、冻结的参数设置成False 比如说仅训练embedding层参数 for name, param in model.named_parameters():if "model.embed_tokens" not in name:param.requires_grad False第二、优化器过滤False的参数 optimizer AdamW(filter(lambda p: p.requires_grad, mo…