ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Stream.sorted的使用

2022-06-04 17:32:22  阅读:151  来源: 互联网

标签:Stream Comparator stream 使用 sorted 排序 page size


Stream.sorted 字段排序
功能说明:以自然序或着自定义Comparator 接口排序规则来排序一个流。

功能详细说明:

1、sorted() 默认使用自然序排序, 其中的元素必须实现Comparable 接口
2、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());

 



标签:Stream,Comparator,stream,使用,sorted,排序,page,size
来源: https://www.cnblogs.com/wangpeng1201/p/16342211.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有