Java Stream流对多个字段进行排序

谈起Java 8,不少熟悉它的人,都会知道有一个对我们帮助很大的新特性,没错,就是我们在项目中经常用到的stream,它对我们处理数据的过程中提供了很多的便利,而这边文章主要讲述stream的便利之一:对多个字段进行排序

  1. 首先我们在数据库中插入几条样例数据
    要求:按照nick_name、address、age顺序进行排序

在这里插入图片描述

  1. 我们先用sql查询的方式对数据进行排序
    在这里插入图片描述

3、通过stream流的方式进行排序

代码实现:

  public Object selectList() {
        List<User> userList = userMapper.selectList(new QueryWrapper<>());
        Comparator<User>comparator =Comparator.comparing(User::getNickName)
                .thenComparing(User::getAddress)
                .thenComparing(User::getAge);
        userList = userList.stream().sorted(comparator).collect(Collectors.toList());
        return userList;
    }

结果展示:

[
    {
        "id": 2,
        "userName": "zhangsan",
        "nickName": "张三",
        "password": "123456",
        "address": "武汉",
        "phone": "18178523659",
        "sex": 1,
        "age": 42,
        "createTime": "2023-07-15 13:30:52"
    },
    {
        "id": 3,
        "userName": "zhangsan102",
        "nickName": "张三",
        "password": "123456",
        "address": "武汉",
        "phone": "15236985214",
        "sex": 1,
        "age": 57,
        "createTime": "2023-07-15 13:31:27"
    },
    {
        "id": 4,
        "userName": "zhangshan103",
        "nickName": "张三",
        "password": "123456",
        "address": "西安",
        "phone": "18956235841",
        "sex": 1,
        "age": 36,
        "createTime": "2023-07-15 13:32:28"
    },
    {
        "id": 1,
        "userName": "admin",
        "nickName": "超级管理员",
        "password": "123456",
        "address": "武汉",
        "phone": "15172378154",
        "sex": 1,
        "age": 30,
        "createTime": "2023-05-08 11:45:31"
    }
]

通过代码我们可以知道通过stream的sorted()方法就可实现我们想要的结果,原理还是利用Comparator比较器对要排序的字段进行比较,如果想倒序,则在比较器后面加上reversed(),该方法是对排序后的数据进行一个反转。

小结:虽然对多个字段进行排序有时候通过sql语句就能实现,但有时候一些特殊场景导致不能使用sql排序的时候,stream就能派上用场了

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值