【使用stream流各种排序以及常用的一些方法】

本文介绍了Java Stream流在数据处理中的应用,详细阐述了如何进行单字段和多字段排序,包括升序和降序排列,并展示了如何通过Stream流取出对象属性值的Set集合以及如何将List转换为Map。示例代码清晰易懂,适用于提升数据库交互性能。
摘要由CSDN通过智能技术生成

序言

处理数据时,为了使数据库交互性能更高,所以减少sql上对数据的操作,这样代码中处理数据就会变多,stream提供了很多使用的方法,下面就是对stream流简单排序使用例子的介绍。

stream流排序

单字段排序

// 查询数据
List<User> list = userService.getAll();
//对数据集合判空防止空指针异常
if (CollectionUtils.isNotEmpty(list)) {
	//这里是根据userId 进行排序——升序排序
    list =  list.stream().sorted(Comparator.comparing(User::getUserId)).collect(Collectors.toList());
    //这里是根据userId 进行排序——降序排序  reversed()
    list =  list.stream().sorted(Comparator.comparing(User::getUserId).reversed()).collect(Collectors.toList());


}

多字段排序

    //这里是根据userId及userName进行联合升序排序
    list =  list.stream().sorted(Comparator.comparing(User::getUserId).thenComparing(User::getUserName)).collect(Collectors.toList());
    //下面两个结果都是以userId降序userName升序排序的结果,但是查询方式不同
    //先以userId升序,升序结果进行userId降序,再进行userName升序
    list =  list.stream().sorted(Comparator.comparing(User::getUserId).reversed().thenComparing(User::getUserName)).collect(Collectors.toList());
    //先以userId降序,再进行userName升序 **推荐使用该种方式**
    list =  list.stream().sorted(Comparator.comparing(User::getUserId,Comparator.reverseOrder()).thenComparing(User::getUserName)).collect(Collectors.toList());
    //先以userId升序,再进行userName降序
    list =  list.stream().sorted(Comparator.comparing(ser::getUserId).thenComparing(User::getUserName,Comparator.reverseOrder())).collect(Collectors.toList());

取出对象某个属性值的set集合

// 这里是取出对应字段集合,用于匹配数据时,判段是否存在对应数据,以免不必要的循环,提高性能
    Set<Integer> userSet = list .stream().map(User::getUserId).distinct().collect(Collectors.toSet());//distinct用于去重

list 转 map

// 使用stream流将list转为map,key为指定字段的值
Map<Integer, List<User>> stationMap = list .stream().collect(Collectors.groupingBy(User::getUserId));

结语

之前总结过一篇stream流各种用法的博文,这一次主要总结排序的几种用法,还有两个常用的方法,不是职业博主,如果有错误的地方,可以指出来及时改正,有需要其他stream流使用方法的可以私信,看到会及时回复大家,谢谢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值