功能说明:以自然序或着自定义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())
实战:按照文件编号进行排序,并计算相关文件的最小页次和最大页次
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);
}
}
}
通过Comparator.thenComparing(Comparator other)
实现
功能说明:
1.先以年龄升序
2.当年龄相同时,在以零花钱升序
示例功能代码:
List<userInfo> userList3 = userList.stream()
.sorted(Comparator.comparing(userInfo::getAge).thenComparing(userInfo::getMoney))
.collect(Collectors.toList());
通过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());