登录
首页 >  文章 >  java教程

JavaList自定义排序:优先8点到23点数据

时间:2025-02-27 22:36:10 475浏览 收藏

本文介绍Java中如何自定义排序List集合,实现将时间属性在8点到23点之间的数据优先显示。通过Java Stream API和自定义Comparator,无需手动操作元素即可完成排序。代码示例演示了如何利用Comparator比较器,巧妙地将8点到23点的数据映射到较小的数值,从而使其在排序后排在前面,最终实现自定义排序的需求,提高了代码效率和可读性。 关键词:Java, List排序, Stream, Comparator, 自定义排序, LocalDateTime

Java中如何自定义排序List集合,使其8点到23点的数据排在前面?

Java中使用Stream进行自定义List排序

本文介绍如何在Java中对包含日期时间属性的List集合进行自定义排序,使8点到23点的数据优先显示。

解决方案:利用Comparator

高效的解决方案是使用Java Stream API和自定义Comparator。 我们无需手动移动元素,而是直接利用Comparator定义排序规则,然后使用sorted()方法进行排序。

代码示例:

假设Obj类包含一个LocalDateTime类型的属性time

import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

class Obj {
    LocalDateTime time;

    public Obj(LocalDateTime time) {
        this.time = time;
    }

    @Override
    public String toString() {
        return time.getHour() + "";
    }
}

public class CustomSort {
    public static void main(String[] args) {
        List list = new ArrayList<>();
        list.add(new Obj(LocalDateTime.of(2024, 1, 1, 23, 0)));
        list.add(new Obj(LocalDateTime.of(2024, 1, 1, 10, 0)));
        list.add(new Obj(LocalDateTime.of(2024, 1, 1, 1, 0)));
        list.add(new Obj(LocalDateTime.of(2024, 1, 1, 8, 0)));
        list.add(new Obj(LocalDateTime.of(2024, 1, 1, 5, 0)));
        list.add(new Obj(LocalDateTime.of(2024, 1, 1, 15, 0)));


        list.stream()
                .sorted(Comparator.comparingInt(o -> {
                    int hour = o.time.getHour();
                    return hour >= 8 && hour <= 23 ? hour : hour + 24; //8-23排前面
                }))
                .forEach(System.out::println);
    }
}

代码解释:

Comparator将时间转换为一个整数,如果小时在8到23之间,则直接返回小时数;否则,加上24,保证8-23小时的数据排在0-7小时数据前面。 sorted()方法根据这个Comparator进行排序,最后forEach打印结果。

输出结果将是8点到23点的数据排在前面,然后是0点到7点的数据。

这种方法简洁高效,充分利用了Java Stream API的特性,避免了手动调整元素的复杂性。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于文章的相关知识,也可关注golang学习网公众号。

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>