
Java中使用Stream进行自定义List排序
本文介绍如何在Java中对包含日期时间属性的List集合进行自定义排序,使8点到23点的数据优先显示。
解决方案:利用Comparator
高效的解决方案是使用Java Stream API和自定义Comparator。 我们无需手动移动元素,而是直接利用Comparator定义排序规则,然后使用sorted()方法进行排序。
立即学习“Java免费学习笔记(深入)”;
代码示例:
假设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<Obj> 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的特性,避免了手动调整元素的复杂性。
以上就是Java中如何自定义排序List集合,使其8点到23点的数据排在前面?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号