java 两种高级的排序方式

文章介绍了在Java中处理实时数据时遇到的乱序问题,并提供了两种解决方案进行排序:一种是使用StreamAPI结合Comparator进行排序,另一种是使用Collections.sort方法自定义比较器。示例代码创建了一个MessageBody对象列表,然后按照时间戳字段进行了升序排序。

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

最近在处理实时数据时,总是乱序,搞很心烦,所以总结了这两种排序方式作为记录,方便以后使用:

public class Test {
    public static void main(String[] args) {

        List<MessageBody> bodies = new ArrayList<>();
        MessageBody body = new MessageBody();
        body.setId(1);
        body.setName("小明1");
        body.setScore(2.3F);
        body.setTimeStamp(System.currentTimeMillis()+1000);



        MessageBody body0 = new MessageBody();
        body0.setId(2);
        body0.setName("小明2");
        body0.setScore(2.3F);
        body0.setTimeStamp(System.currentTimeMillis()+2000);

        MessageBody body1 = new MessageBody();
        body1.setId(3);
        body1.setName("小明3");
        body1.setScore(2.3F);
        body1.setTimeStamp(System.currentTimeMillis()+3000);

        MessageBody body2 = new MessageBody();
        body2.setId(4);
        body2.setName("小明4");
        body2.setScore(2.3F);
        body2.setTimeStamp(System.currentTimeMillis()+4000);

        MessageBody body3 = new MessageBody();
        body3.setId(5);
        body3.setName("小明5");
        body3.setScore(2.3F);
        body3.setTimeStamp(System.currentTimeMillis()+5000);

        MessageBody body4 = new MessageBody();
        body4.setId(6);
        body4.setName("小明6");
        body4.setScore(2.3F);
        body4.setTimeStamp(System.currentTimeMillis()+6000);

        MessageBody body5 = new MessageBody();
        body5.setId(7);
        body5.setName("小明7");
        body5.setScore(2.3F);
        body5.setTimeStamp(System.currentTimeMillis()+7000);

        MessageBody body6 = new MessageBody();
        body6.setId(8);
        body6.setName("小明8");
        body6.setScore(2.3F);
        body6.setTimeStamp(System.currentTimeMillis()+8000);

        MessageBody body7 = new MessageBody();
        body7.setId(9);
        body7.setName("小明9");
        body7.setScore(2.6F);
        body7.setTimeStamp(System.currentTimeMillis()+9000);
        bodies.add(body0);
        bodies.add(body);
        bodies.add(body3);
        bodies.add(body1);
        bodies.add(body2);
        bodies.add(body7);
        bodies.add(body4);
        bodies.add(body6);
        bodies.add(body5);

        System.out.println(JSONObject.toJSONString(bodies));

        System.out.println("-------------------------------------------------------------------------------");
		// 第一种排序
        List<MessageBody> collect = bodies.stream().sorted(Comparator.comparing(MessageBody::getTimeStamp)).collect(Collectors.toList());
        System.out.println(JSONObject.toJSONString(collect));
        System.out.println("-------------------------------------------------------------------------------");
		// 第二种排序
        Collections.sort(bodies, new Comparator<MessageBody>() {
            @Override
            public int compare(MessageBody o1, MessageBody o2) {
                Long timeStamp = o1.getTimeStamp();
                Long timeStamp1 = o2.getTimeStamp();
                return timeStamp.compareTo(timeStamp1);
            }
        });


        System.out.println(JSONObject.toJSONString(bodies));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值