#华为云·寻找黑马程序员#【代码重构之路】我是如何将8行代码缩减成1行的
【摘要】最近公司在大力提倡clean code, 而clean code 不仅是新写的代码要做,老旧的代码也要适当重构,精简我们的代码,毕竟代码还是要给人看的。
个人比较喜欢重构,当然,手术级的重构没做过,但是小小补补还是可以的。在浏览代码时,看到项目中有不少可以改进的地方,于是就选择性地做了一些简单的重构
下图是我的一个重构提交记录,也是本次分享的主题。成功的将8行代码精简为1行
这2段demo,是很经典的对象排序,相信你也经常见过
//1、通过实现Comparable接口来排序
public class Student implements Comparable<Student> { private int age; //省略get set方法@Overridepublic int compareTo(Student o) { if (this.getAge() > o.getAge()) { return 1;} else if (this.getAge() < o.getAge()) { return -1;} else { return 0;}}
} //排序List<Student> students = ...Collections.sort(students);
//2、使用匿名内部类
List<Student> students = ...
Collections.sort(students, new Comparator<Student>() { @Overridepublic int compare(Student o1, Student o2) { return o1.getAge() - o2.getAge();}
});
这段代码的意图很简单,就是将集合中的Student根据age属性进行升序排序。很简单的逻辑,却用了这么多行,其实Java最为人诟病的地方就是语法繁琐,明明是很简单的需求,非要很多行才能搞定,但是Java也在不断进步呀。这不,上面的代码,就可以用一行代码搞定。
现在我就来重构段代码,在此之前,你需要了解Java8的知识,本篇博客不提供教程,如有需要,请移步Java8教程
Java8于2014年发布,是Java历史上很重要的一个版本,它正式支持了函数式编程
截至目前,Java最新版本为Java12。
要注意项目中使用的JDK版本,比如项目中是JDK8,重构时你用了Var,修改引入问题,真是该杀。
第一步:使用lambda表达式替换匿名内部类
Collections.sort(students, (o1, o2) -> o1.getAge() - o2.getAge());
第二步:List.sort替换Collections
students.sort((o1, o2) -> o1.getAge() - o2.getAge());
第三步:lambda表达式改为方法引用
students.sort(Comparator.comparingInt(Student::getAge));
ok,上面代码通通不要,只此一行代码搞定! 默认是升序。
那么问题来了,如果我要降序怎么办,别急,可以翻转啊啊啊啊
students.sort(Comparator.comparingInt(Student::getAge).reversed());
这里用到了Comparator.comparingInt()方法,用于比较Int型,我们看下它的所有方法
除了Int,还有其他类型的比较,并且thenComparing方法提供了二次比较的能力,比如还有一个属性name,当age相同时,就比较name属性来排序。
代码可读性很重要,最后让我们从左往右读下这段代码:
“将students按照age排升序,最后给我翻转下吧。” 就是这么简单~
students.sort(Comparator.comparingInt(Student::getAge).reversed())
来源:华为云社区 作者:大刁哥
#华为云·寻找黑马程序员#【代码重构之路】我是如何将8行代码缩减成1行的相关推荐
- 移动端开发语言的未来的猜想#华为云·寻找黑马程序员#
[摘要] #华为云.寻找黑马程序员# 不管是最早的Phonegap,还是后来的React Native.Weex,Flutter,或者是各个公司自创开发语言,都是在不断寻求开发语言统一,从而解决ios ...
- 三伏天里小试牛刀andriod开发 #华为云·寻找黑马程序员#
三伏天里小试牛刀andriod 开发 #华为云·寻找黑马程序员# 2019年07月,北京,三伏天,好热啊.越热自己还越懒得动换(肉身给的信号),但是做为产品经理/交互设计师的,总想着思考些什么(灵魂上 ...
- #华为云·寻找黑马程序员#【代码重构之路】如何“消除”if/else
1. 背景 if/else是高级编程语言中最基础的功能,虽然 if/else 是必须的,但滥用 if/else,特别是各种大量的if/else嵌套,会对代码的可读性.可维护性造成很大伤害,对于阅读代码 ...
- #华为云·寻找黑马程序员#【代码重构之路】如何优雅的关闭外部资源
1.背景 在Java编程中,如果打开了外部资源(文件.数据库连接.网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们.因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制,如果我们不在编 ...
- eplices如何导入外部代码_#华为云·寻找黑马程序员#【代码重构之路】如何优雅的关闭外部资源...
1.背景 在Java编程中,如果打开了外部资源(文件.数据库连接.网络连接等),我们必须在这些外部资源使用完毕后,手动关闭它们.因为外部资源不由JVM管理,无法享用JVM的垃圾回收机制,如果我们不在编 ...
- #华为云·寻找黑马程序员#【代码重构之路】使用Pattern的正确姿势
1.问题 在浏览项目时,发现一段使用正则表达式的代码 这段代码,在循环里执行了Pattern.matches()方法进行正则匹配判断. 查看matches方法的源码,可以看到 每调用一次matches ...
- python让你再也不为文章配图与素材发愁,让高清图片占满你的硬盘! #华为云·寻找黑马程序员#
欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...
- 大型情感剧集Selenium:1_介绍 #华为云·寻找黑马程序员#
学习selenium能做什么? 很多书籍.文章中是这么定义selenium的: Selenium 是开源的自动化测试工具,它主要是用于Web 应用程序的自动化测试,不只局限于此,同时支持所有基于web ...
- 【带着canvas去流浪(13)】用Three.js制作简易的MARVEL片头动画(下)#华为云·寻找黑马程序员#
[摘要] three.js实现的Web 3D字体模型动画 示例代码托管在:http://www.github.com/dashnowords/blogs 有了上一篇基础知识的储备,本节就来制作一下简易 ...
最新文章
- 修复思维导图mindmanager移动文件位置后打开崩溃
- python(numpy,pandas1)——numpy(ndim,shape,size,zero, empty, arange, linspace)
- Linux下Apache自动监测重启脚本
- 腾讯机器狗,站起来了!
- javaScript转换日期合格式
- python元素分类_Python 练习 - 元素分类
- XGBoost实战与调参优化
- SVN图标不能正常显示
- 开课吧:一文读懂算法工程师大致分类与技术要求
- Windows核心编程_更改当前工作目录
- html倾斜变形,深入理解CSS变形transform(2d)_html/css_WEB-ITnose
- 关于三极管的饱和与截止(失真)
- ATK-SIM900A入门
- uniapp H5微信公众号跳转小程序
- cross product or vector product - 叉积或向量积
- EDI 公开课:X12 850采购订单转换至可视化Excel
- python将html转成pdf,python将html转成PDF的示例
- vs编译运行报错:未声明的标识符
- QT Creator 输入中文变繁体的解决方法
- MCK主机加固数据安全解决方案
热门文章
- 计算机科学与技术考英语一还是英语二,​在职研究生考试是考英语一还是英语二?区别是什么?...
- 套用表格格式转化为普通区域_学会修改表格格式,让你的报表更美观
- centos mysql cpu_MySQL占用CPU100%解决一例
- vc6 设置静态文本框透明_微信还能这么玩?半透明的微信背景主题用起来!
- linux下python开发工具_Python开发工具 Wing IDE
- php 单引号 数据库,关于php:如何在写入Mysql数据库时处理撇号’单引号
- 【错误】【vscode】'#' not expected here
- jQuery UI加入效果
- Oracle11g数据库监听配置
- leetcode 1189 python