Java8排序 Stream的sorted方法

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());
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Archie_java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值