Java8排序 Stream的sorted方法
2023-09-14 09:14:51 时间
Java 8 Stream之sorted()排序示例:使用java 8 的流式sorted
排序List集合
Stream.sorted 字段排序
功能说明:以自然序或着自定义Comparator
接口排序规则来排序一个流。
功能详细说明:
1、sorted()
默认使用自然序排序, 其中的元素必须实现Comparable
接口
2、sorted(Comparator comparator)
:我们可以使用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())
实战:按照文件编号进行排序,并计算相关文件的最小页次和最大页次
@Override
public void pageCalculation(String archSid) {
// TODO Auto-generated method stub
Map<String, Object> paramter = new HashMap<String,Object>();
paramter.put("archSid", archSid);
List<UcasFileInfo> updates = new ArrayList<UcasFileInfo>();
List<UcasFileInfo> ucasFileInfos = ucasFileInfoMapper.selectAll(paramter);
// 数据过滤
if(CollectionUtils.isNotEmpty(ucasFileInfos)){
// Java8 排序 + 过滤
List<UcasFileInfo> filter = ucasFileInfos.stream().filter(item->{
return item.getTextNums() != null && StringUtils.isNoneEmpty(item.getArchFileNo());
}).sorted(new Comparator<UcasFileInfo>(){
@Override
public int compare(UcasFileInfo o1, UcasFileInfo o2) {
if(Integer.valueOf(o1.getArchFileNo()) > Integer.valueOf(o2.getArchFileNo())){
return 1;
} else if(Integer.valueOf(o1.getArchFileNo()) == Integer.valueOf(o2.getArchFileNo())){
return 0;
} else {
return -1;
}
}
}).collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(filter)){
// 页次最大与最小值计算
Integer total = 0;
String page_size = null;
String max_page_size = null;
for(int i =0; i < filter.size(); i++){
UcasFileInfo ucasFileInfo = filter.get(i);
UcasFileInfo update = new UcasFileInfo();
update.setSid(ucasFileInfo.getSid());
if(i == 0){
page_size = "1";
total += ucasFileInfo.getTextNums();
max_page_size = page_size.concat("-")+(total);
} else {
page_size = String.valueOf(total + 1);
total += ucasFileInfo.getTextNums();
max_page_size = page_size.concat("-")+(total);
}
// 逻辑判断:页次最大值与最小值选择
Integer index = i + 1;
if(index >= filter.size()){
update.setPageNo(max_page_size);
} else {
update.setPageNo(page_size);
}
updates.add(update);
}
// 执行批量更新
ucasFileInfoMapper.batchUpdate(updates);
}
}
}
Stream.sorted 多字段排序
通过Comparator.thenComparing(Comparator other
)实现
功能说明:
1.先以年龄升序
2.当年龄相同时,在以零花钱升序
示例功能代码:
List<userInfo> userList3 = userList.stream()
.sorted(Comparator.comparing(userInfo::getAge).thenComparing(userInfo::getMoney))
.collect(Collectors.toList());
Stream.sorted 多字段排序区分降序和升序
通过Comparator.thenComparing(Comparator other
) 实现多字段排序,并且使用Comparator.reverseOrder() 实现降序和升序
功能说明:
1.先以年龄升序
2.当年龄相同时,在以零花钱降序 Comparator.reverseOrder()
示例功能代码:
List<userInfo> userList3 = userList.stream()
.sorted(Comparator.comparing(userInfo::getAge)
.thenComparing(userInfo::getMoney,Comparator.reverseOrder())).collect(Collectors.toList());
相关文章
- linux sort命令 排序,Linux sort排序方法[通俗易懂]
- 实时数据系统中几种常用的验证方法
- java字符串分割split_js的sort排序方法
- 常用排序方法——python写法【冒泡、快速排序、TOP-K问题】
- 系统重构的智慧:用领域驱动设计的方法驱动系统重构 | TVP十日谈预告
- SQL开发知识:MySQL限制查询和数据排序方法
- Linux下查看运行中进程的方法(linux查看正在运行的进程)
- oracle 归档进程简介和维护方法(oracle归档进程)
- Linux 中实现行排序的方法(行排序linux)
- MSSQL中查看账号密码的三大方法(mssql查看账号密码)
- MySQL排序问题字典序不使用的解决方法(MySQL不按照字典排序)
- ASP.NET技巧:数据岛出到Excel最为简易的方法
- asp.net用继承方法实现页面判断session
- ASP.NET缓存的方法和最佳实践
- php二维数组排序与默认自然排序的方法介绍
- ajax返回的json内容进行排序使用sort()方法实现
- 浅析c#中WebBrowser控件的使用方法
- mysql关键词相关度排序方法详细示例分析
- 求数组最大最小值方法适用于任何数组
- Eclipse对printf()不能输出到控制台的快速解决方法
- android动态控制状态栏显示和隐藏的方法实例
- Python学习笔记_数据排序方法
- php堆排序实现原理与应用方法
- js使用Array.prototype.sort()对数组对象排序的方法