使用java8进行集合数据排序,比较,topn

本文介绍了如何使用Java8的集合API进行数据排序,包括根据年龄(age)倒序排列,若年龄相同则按姓名(name)升序排序。通过`sort`, `comparing`, `thenComparing`方法实现排序,并利用`limit`获取年龄最大的前N个元素。实操过程简洁高效。" 127802295,10960617,WPF图形绘制:详解Path几何线段,"['WPF', '图形绘制', '贝塞尔曲线']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先有一个实体类

@Data
@TableName("user")
public class UserInfo extends Model<UserInfo> {
    /**
     * 主键Id
     */

    private int id;
    /**
     * 名称
     */
    private String name;

    /**
     * 年龄
     */
    private int age;
}

然后新建一个main方法测试,根据age倒叙排列,如果age相等则根据name排序
使用关键词sort,comparing,thenComparing

public class TestSort {
    public static void main(String[] args) {
        List<UserInfo> list = new ArrayList<>();
        UserInfo userInfo = new UserInfo();
        userInfo.setId(1);
        userInfo.setAge(34);
        userInfo.setName("yiyi");
        UserInfo userInfo1 = new UserInfo();
        userInfo1.setId(2);
        userInfo1.setAge(3);
        userInfo1.setName("erer");
        UserInfo userInfo2 = new UserInfo();
        userInfo2.setAge(14);
        userInfo2.setName("san");
        UserInfo userInfo3 = new UserInfo();
        userInfo3.setId(3);
        userInfo3.setAge(14);
        userInfo3.setName("wuw");
        list.add(userInfo);
        list.add(userInfo1);
        list.add(userInfo2);
        list.add(userInfo3);

        //根据age从大到小排列,如果有相同的age,则按照姓名倒叙排列
        List<UserInfo> sortList = list.stream().sorted(
                Comparator.comparing(UserInfo::getAge).thenComparing(UserInfo::getName).reversed()
        ).collect(Collectors.toList());
        System.out.println("原来的集合:  "+list);

        System.out.println("倒叙排列:  " + sortList);
    }
}

得到的结果如下

原来的集合:  [UserInfo(id=1, name=yiyi, age=34), UserInfo(id=2, name=erer, age=3), UserInfo(id=0, name=san, age=14), UserInfo(id=3, name=wuw, age=14)]
倒叙排列:  [UserInfo(id=1, name=yiyi, age=34), UserInfo(id=3, name=wuw, age=14), UserInfo(id=0, name=san, age=14), UserInfo(id=2, name=erer, age=3)]

最后获取年纪最大的人的信息,使用limit关键字

  List<UserInfo> collect = sortList.stream().limit(1).collect(Collectors.toList());
        System.out.println("年纪最大的人"+collect);

得到结果

年纪最大的人[UserInfo(id=1, name=yiyi, age=34)]

至此,介绍完毕,还是蛮好用的。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值