用lambda表达式精简了比较器,我舒服了!

546 阅读2分钟

相信大家都有过排序的经历,排序嘛,直接sql order by 完事,也可以,但有时候就是需要我们用代码来为返回的集合并按照不同属性排序,啪!很快啊,我就把我常用的排序方法总结了出来。

  • 传统写法

事情是这样的,现在我准备把这个集合按照age和id一次排序。

首先我需要一个比较器Comparator,在传统写法中我需要匿名内部类来帮我去比较,于是乎......比较代码就酱

那这样我顺利通过Comparator来解决了我的问题。

其实Comparator是通过compare方法来实现比较的,compare方法传参和return如下:

说的就是两数做比较返回值:负数(第一个小),0(相等),正数(第一个大)

  • lambda精简代码 

ok,这是传统写法,那我不想这么写,我觉得代码不够简洁,我决定采用lambda表达式来写,于是我这样写:

  • 采用jdk8封装写法

ok,我用lambda精简了代码之后,但是我觉得还是有更精简的写法来实现功能,于是我这样写。

list.sort(Comparator.comparing(Student::getAge).thenComparing(Student::getId));

Lambda表达式的出现大大的简化了匿名内部类的书写,像我们常用的new Runnable,new Comparator还有不太常用的new ActionListener 都可以用lambda表达式来做优雅的表达,其中 最简单的Lambda表达式可以用逗号分隔的参数列表、->符号和功能语句块来表示,如果Lambda的功能语句块有点复杂,我们可以用大括号包起来。而传递的参数 编译器会根据上下文推测出来,我们也可以显示的指定参数类型,但是要把类型包含在小括号里。