请教个 Java list 处理数据的问题?

2023-12-18 10:44:04 +08:00
 godleon

问题

环境:java ,springboot , jdk8

我现在有个 List<bean> beans ; bean 里有 2 个字段,aTime ,bTime , 都是 java.utile 包下 Date 类型;

我现在的需求是, 我需要对比两个字段,有一个是最新的就在 list 的最前面;

如:bean1 {aTime:2023-12-18 05:00:00 , bTime: 2023-12-18 10:40:00}

      bean2 {aTime:2023-12-18 04:00:00 , bTime: 2023-12-18 11:40:00}

      bean3 {aTime:2023-12-18 11:00:00 , bTime: 2023-12-18 03:40:00}

那么 list 返回 顺序是 [bean2, bean3, bean1] 这种该怎么判断一下

2812 次点击
所在节点    程序员
51 条回复
cpstar
2023-12-18 14:31:39 +08:00
恰巧在 compare 上,曾经遇到一个 BUG ,https://page.cpstar.cn/post/chu-li-yi-ge-yi-xiang-bu-dao-de-bug/,自己写 comparator ,要注意三性
twofox
2023-12-18 14:43:26 +08:00
@ZZ74 如果是我被一楼回复了,我肯定先滚去搜一下是啥玩意

然后回来谢谢他,而不是这是啥玩意🤣
c2const
2023-12-18 14:57:15 +08:00
虽然工作中 Java 接触不多,虽然技术水平和薪资也无关,
---------------
但突然感觉有的人确实不适合编程 :(
或者说只是为了混个工作? :(
broken123
2023-12-18 14:59:21 +08:00
为何会问如此基础的问题?不先了解下排序的本质么
supertailcat
2023-12-18 15:19:31 +08:00
这种问题建议直接 LLM 。如果答案不对就说明你的描述能力太差了。而且不得不说,你题面这个描述确实太差了…
lmq2582609
2023-12-18 16:17:01 +08:00
List<Bean> beans;
beans.sort(
Comparator.comparingLong((Bean bean) -> {
//取 aTime 时间戳
Date aTime = bean.getATime();
//取 bTime 时间戳
Date bTime = bean.getBTime();
//取 aTime 和 bTime 中最新的时间(时间戳较大的就是最新的时间)
return Math.max(aTime.getTime(), bTime.getTime());
}).reversed() //加 reversed()是排倒序(从大到小)
);
希望可以帮到你!
orionnnnn
2023-12-18 16:42:06 +08:00
@lmq2582609 好开!
yeyang5211
2023-12-18 16:55:55 +08:00
请教问题的时候记得先把火气憋住,搞到答案了再怼. 轻重缓急晓得伐
mazhiyuan
2023-12-18 17:31:05 +08:00
@lmq2582609 学习了,指不定日后会用到,感谢。
godleon
2023-12-19 14:49:31 +08:00
@lmq2582609 首先谢谢回复,当 atime 和 btime 都不为 null 的时候 确实可以满足需求,但是我的需求里 现在 atime 和 btime 可能有一个会为 null, 当一个为 null 时,另一个日期继续参与排序,该怎么优化一下~
lmq2582609
2023-12-19 23:08:58 +08:00
@godleon
如果有 null 的情况,可以给一个默认值,如-1
List<Bean> beans;
beans.sort(
Comparator.comparingLong((Bean bean) -> {
//取 aTime 时间戳
Date aTime = bean.getATime();
//取 bTime 时间戳
Date bTime = bean.getBTime();
//取 aTime 和 bTime 中最新的时间(时间戳较大的就是最新的时间)
return Math.max(getTime(aTime), getTime(bTime));
}).reversed() //加 reversed()是排倒序(从大到小)
);

private long getTime(Date date) {
return date == null ? -1 : date.getTime();
}

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1001247

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX