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())
实战:按照文件编号进行排序,并计算相关文件的最小页次和最大页次
@Overridepublic void pageCalculation(String archSid) {// TODO Auto-generated method stubMap<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>(){@Overridepublic 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());