Java8中Stream如何使用sorted进行排序呢?
下文笔者讲述Stream中使用sorted进行排序的方法及示例分享,如下所示
使用Stream.sorted方法,即可实现按字段排序 如: Stream.sorted的功能 sorted() 默认使用自然序排序 其中的元素必须实现Comparable 接口 sorted(Comparator<? super T> 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<? super T> other) 实现 1.先以年龄升序 2.当年龄相同时,在以零花钱升序例
List<userInfo> userList3 = userList.stream() .sorted(Comparator.comparing(userInfo::getAge).thenComparing(userInfo::getMoney)) .collect(Collectors.toList());
Stream.sorted 多字段排序区分降序和升序
使用Comparator.thenComparing(Comparator<? super T> 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());
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。