代码精进之路~函数

职责单一

        一个方法只做一件事情。

eg.给员工发工资

public void pay(List<Employee> employees) {for (Employee e : employees) {if (e.isPayDay()) {Money pay = e.calculateDay();e.deliverDay(pay);}}}

实际上做了3件事:遍历所有雇员、检查是否该发工资、支付薪水

// 遍历所有雇员.
public void pay(List<Employee> employees) {for (Employee e : employees) {payIfNecessary(e);}}// 检查是否该发工资.
private void payIfNecessary(Employee e) {if (e.isPayDay()) {calculateAndDeliverDay(e);}   
}// 支付薪水.
private void calculateAndDeliverDay(Employee e) {Money pay = e.calculateDay();e.deliverDay(pay);
}

优化判空

if (user != null) {Address address = user.getAddress();if (address != null) {Country country = address.getCountry();if (country != null) {String isocode = country.getIsocode();if (isocode != null) {isocode = isocode.toUpperCase();}}}
}

使用Optional改造

String isocode = Optional.ofNullable(user).map(User::getAddress).map(Address::getCountry).map(Country::getIsocode).orElse("default");

优化缓存判断

public List<Product> getProducts(List<Long> productIds) {...List<Product> products = new ArrayList<>(productIds.size());// 查询有哪些未命中的商品ID.List<Long> notHitIds = productIds.stream().filter(productId -> {String cacheKey = computeKey(productId);// 从缓存中进行查找.Result<DataEntry> result = tairManager.get(namespace, cackeKey);if (!result.isSuccess()) {log.error(String.format("tair get with key(%s) cause error:%s", cacheKey, result.getRc().getMessage()));return true;}if (ResultCode.DATANOTEXISTS.equals(result.getRc)) {return true;}Product product = result.getValue() == null ? null : result.getValue().getValue();if (product == null) {return true;}products.add(product);return false;}).collect(Collectors.toList());// 未命中缓存的商品ID从DB中查找.List<Product> productsFromDB = notHitIds.stream().map(productId -> getProductsFromDb(productId)).collect(Collectors.toList());products.addAll(productsFromDB);return products;
}

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

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

相关文章

智能哲学:“学习机器”与“机器学习” ——解读图灵思想中的人工智能

周剑铭&#xff0c;自由学者。研究方向为中西文化比较研究&#xff0c;智能哲学&#xff0c;算法、不确定性和不确定性问题(NP)理论。柳渝&#xff0c;法国儒勒凡尔纳公立综合大学计算机&#xff08;Dpartement Informatique, UFR des Sciences, Universit de Picardie Jules V…

【分享】关于对象关系映射的理解

对象关系映射&#xff08;Object Relational Mapping&#xff0c;简称ORM&#xff09;是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单的说&#xff0c;ORM是通过使用描述对象和数据库之间映射的元数据&#xff0c;将java程序中的对象自动持久化到关系数…

安卓逆向_10 --- Log 日志的插入和分析、toast方法、栈跟踪

From&#xff1a;https://blog.csdn.net/weixin_42680210/article/details/90384358 在安卓逆向中&#xff0c;常常用到 栈跟踪、toast方法、Log日志的插入 等&#xff0c;以便于我们更好的分析代码&#xff0c;下面就演示下这三个方法的使用及简单的分析。。。 1. 插入 Log 信…

事实--思维导图笔记

事实--思维导图笔记 https://www.processon.com/view/5d330846e4b058ef96ae5529?fromnew1#map 完整版

未来20年内,无人驾驶将颠覆这33大行业

来源&#xff1a;智车科技在未来的20年里&#xff0c;无人驾驶汽车将在美国广泛使用&#xff0c;这几乎是必然的。包括谷歌、苹果和梅赛德斯-奔驰在内的二十多家大型企业都在努力打造自己的无人驾驶汽车品牌。特斯拉的Model S已经推出了一种可以在高速公路上形式的无人驾驶车型…

C# GridView单元格合并.

使用int[] 列索引集合将第1列的单元格格一样的数据合并..GroupRows(GridView1,newint[]{0}); 全部代码///<summary>///GridView合并行 zgkesina.com qq:116149///</summary>///<param name"p_GridView">Grid控件</param>///<param name&q…

安卓逆向_11 --- methodprofiling(方法分析)【在 smali 代码中打印信息 --- 协议分析常用】

From【修改 smali 代码打印信息】&#xff1a;https://www.bilibili.com/video/BV1UE411A7rW?p38 【Android】开发优化之 --- 调优工具&#xff1a;TrackView、Method Profiling&#xff1a;https://blog.csdn.net/fcly2013/article/details/38080333 TrackView、Method Prof…

Getting Started with Google Guava--思维导图笔记

Getting Started with Google Guava--思维导图笔记 分享地址&#xff1a;https://www.processon.com/view/link/5d413527e4b020861117eb7b

德国科学院院士:传统企业寻求变革,向智能制造靠近

来源&#xff1a;亿欧摘要&#xff1a;中新人工智能高峰论坛上&#xff0c;德国科学院院士汉斯乌思克尔特详细介绍了AI在工业上的概念和具体运用案例。他把“AI工业”原理分为三层&#xff0c;由内到外分别是&#xff1a;生产层、运行层和数据结合层。经由这三层&#xff0c;智…

kernel部分数据结构列表三(inode)

kernel部分数据结构列表三(inode) /**索引节点对象由inode结构体表示&#xff0c;定义文件在linux/fs.h中*/struct inode { struct hlist_node i_hash; /* 哈希表 */ struct list_head i_list; /* 索引节点链表 */ …

安卓逆向_12 --- jeb工具的使用 ( 动态调试 smali 代码 【 普通调试 和 debug调试 】)

From&#xff1a;https://www.52pojie.cn/forum.php?modviewthread&tid742250 jeb 动态调试 smali 代码&#xff1a;https://www.bilibili.com/video/BV1UE411A7rW?p39 使用 JEB 调试 Android App&#xff1a;https://www.jianshu.com/p/a1a7cf687cd2 了解 JEB 和 IDA 使…

Hamcrest总结--思维导图

来源&#xff1a;https://blog.csdn.net/neven7/article/details/42489723 思维导图&#xff1a;https://www.processon.com/view/link/5da81f53e4b09df55016b55d

机器学习应用的未来是什么?微型化

作者 | Pete Warden编译 | 专知翻译 | Yongxi, Huaiwen数据科学家&#xff0c;Jetpac 公司CTO Pete Warden发表了一篇博文&#xff0c;详细阐述了微型化是机器学习应用的一条出路&#xff0c;并且相信机器学习可以在微小的、低功耗的芯片上运行&#xff0c;利用深度学习可以做到…

使用flot绘图出现window.G_vmlCanvasManager is null or not an Object

使用flot绘图出现window.G_vmlCanvasManager is null or not an Object导致ie无法绘图在firefox上不会报错解决办法是在加载jquery.flot.js之前先加载excanvas.js转载于:https://www.cnblogs.com/JerryWang1991/archive/2011/07/06/3936395.html

Python 爬虫 性能 相关( asyncio 模块 --- 高性能爬虫 )

From&#xff1a;https://www.cnblogs.com/bravexz/p/7741633.html 爬虫应用 asyncio 模块 ( 高性能爬虫 )&#xff1a;https://www.cnblogs.com/morgana/p/8495555.html python异步编程之asyncio&#xff08;百万并发&#xff09;&#xff1a;https://www.cnblogs.com/shenh…

“反机器学习”:人工智能突破的关键是“遗忘”

来源&#xff1a;36Kr摘要&#xff1a;人工智能越来越频繁地出现在人们的生活中&#xff0c;而其技术上的重大进步仍然不曾明朗。本文作者Natalie Fratto在“Machine Un-Learning: Why Forgetting Might Be the Key to AI”一文中讲述了实现人工智能战略性遗忘的三个方法。让我…

反编译资料收集

JDP 一个非常好用的Java反编译工具&#xff1a;官方描述“The “Java Decompiler project” aims to develop tools in order to decompile and analyze Java 5 “byte code” and the later versions.”。 官方网址&#xff1a;http://java.decompiler.free.fr/ &#xfeff;&…

Java 内部类 和 匿名内部类

From&#xff1a;https://www.cnblogs.com/geeksongs/p/9836154.html 一&#xff0c;内部类 其实内部类是十分简单的&#xff0c;我们根据其字里行间的意义就可以知道内部类应该是一个类当中的一个类&#xff0c;相当于一个类进行了嵌套&#xff0c;就如同循环的嵌套一般。 内…

打造一个宇宙 星系模拟产生对宇宙进化惊人见解

图片来源&#xff1a;TNG COLLABORATION来源&#xff1a;中国科学报摘要&#xff1a;研究人员不断发展宇宙模型&#xff0c;并借此发现新的宇宙理论。美国加州理工学院理论物理学家Philip Hopkins喜欢跟他的同事恶作剧。作为模拟星系形成的专家&#xff0c;Hopkins有时会在演讲…

Scrapy 性能

参考&#xff1a;https://blog.csdn.net/s150503/article/details/72571680 CONCURRENT_REQUESTS 与 DOWNLOAD_DELAY Scrapy 中 CONCURRENT_REQUESTS 与 DOWNLOAD_DELAY 的联系&#xff0c;先建立一个项目来找CONCURRENT_REQUESTS与DOWNLOAD_DELAY的联系 以豆瓣电影top250 为例…