1.stream流式排序
Java8提供了流式操作来简化我们的编程,比如排序、分组、过滤、Map操作等API,配合Lambda表达式给我们编程带来了很大的便利,这篇文章重点介绍Stream流式排序功能–> list.stream().sorted(……)。
功能说明:能够使用自然序,或着实现Comparator 函数接口来自定义排序规则。
1.使用说明:
- 自然序排序stream().sorted(),List中的元素需要实现Comparable 接口,例如String,通常我们自己定义的类是没有实现这个接口的。
- 自定义排序stream().sorted(Comparator<? super T> comparator),如果我们自定义的类没有实现Comparable接口,那么就可以使用这种方式,使用Lambada 来创建一个Comparator (函数接口)实例,并且可以根据需要进行升序、降序排列
#自然序排序一个list
list.stream().sorted()
#自然序逆序元素,使用Comparator 提供的reverseOrder() 方法
list.stream().sorted(Comparator.reverseOrder())
# 使用Comparator 来排序一个list
list.stream().sorted(Comparator.comparing(Student::getAge))
# 颠倒使用Comparator 来排序一个list的顺序,使用Comparator 提供的reverseOrder() 方法
list.stream().sorted(Comparator.comparing(Student::getAge).reversed())
2.多字段排序
通过Comparator.thenComparing(Comparator<? super T> comparator
) 实现
List<Customer> customerListNew = customerList.stream()
.sorted(Comparator.comparing(Customer::getCustomerCode)
.thenComparing(Customer::getProductSeries)
).collect(Collectors.toList());
2.区分升序和降序
- 通过Comparator.thenComparing(Comparator<? super T> other) 实现多字段排序
- 使用Comparator.reverseOrder() 做为thenComparing方法的参数,实现降序
先以年龄的升序排序,再以地域降序Comparator.reverseOrder()
List<Customer> customerListNew = customerList.stream()
.sorted(Comparator.comparing(Customer::getAge)
.thenComparing(Customer::getArea, Comparator.reverseOrder())
).collect(Collectors.toList());
有的情况下,需要将字符串转为数字进行排序,这时候该怎么办呢?使用Lambda表达式.
.thenComparing(t -> {}) 中的Lambda表达式可能会失去java类型,这时候需要在开始的时候加上强制类型转换 Comparator.comparing( (Customer s) -> {……} )
//按照Type, Name进行排序
List<Customer> sceneListNew = sceneList.stream()
.sorted(Comparator.comparing((Customer s) -> {
if(StringUtils.isEmpty(s.getTypeSeq())) return 0;
return Integer.valueOf(s.getTypeSeq());
}).thenComparing(t -> {
if(StringUtils.isEmpty(t.getNameSeq())) return 0;
return Integer.valueOf(t.getNameSeq());}
)).collect(Collectors.toList());
2.Collections.sort(……) 排序
下面也给出一个需要将String转为Integer进行比较的例子
Collections.sort(stageList, (mgStage1, mgStage2) -> {
if (null == mgStage1.getStageSeq()){
return 1;
}
if (null == mgStage2.getStageSeq()){
return -1;
}
return Integer.parseInt(mgStage1.getStageSeq()) - Integer.parseInt(mgStage2.getStageSeq());
});
原文地址:https://blog.csdn.net/wdquan19851029/article/details/134599397
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_14377.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。