目录
对数组和集合进行排序是Java 8 lambda
令人惊奇的一个应用,我们可以实现一个Comparators
来实现各种排序。
看下面案例:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
|
Person的数据有:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
我们希望根据名字排序(last name
),然后再根据姓(first name
)排序。
在Java 7之前,我们通常是通过实现一个Comparator:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
而在Java 8中,我们可以使用lambda替代匿名函数,如下:
?
1 2 3 4 5 6 7 8 9 10 11 |
|
在这里,Lambda
表达式 (p, o) -> p.lastName.compareTo(o.lastName)
替代之前的匿名函数new Comparator<Person>() {}
因为Java
编译器并不能推迟对Lambda
表达式类型判断,比如延迟到将comparator
传递到sort()
方法,因此使得我们进行链式Comparator
书写有点困难,
比如我们想写成如下:
?
1 2 |
|
换句话说,类型判断是从左到右,而不是从右到左,我们可以通过创建一个泛型来进行类型推断:
?
1 2 3 4 5 6 7 8 9 |
|
通过上面的compare()方法,我们可以书写流畅的comparator链:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
到此这篇关于Java8的Lambda和排序的文章就介绍到这了,更多相关Java Lambda和排序内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://www.jdon.com/idea/java/java-8-lambdas-sorting.html
本文链接:https://my.lmcjl.com/post/14678.html
4 评论