请教个 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] 这种该怎么判断一下

2810 次点击
所在节点    程序员
51 条回复
liprais
2023-12-18 10:50:27 +08:00
Comparators
提问之前先搜索
godleon
2023-12-18 10:52:52 +08:00
@liprais 这是啥东西
chendy
2023-12-18 10:52:56 +08:00
建议去写点 leetcode 入门题,这不就一排序么…

ArrayList<X> xx = new ArrayList<>();
xx.sort(Comparator.comparing(X::getA).thenComparing(X::getB));
AlvaMu
2023-12-18 10:55:46 +08:00
实现 Comparator 接口,重写 compare 方法,用参数中的两个对象,先各自取出较大的 Date,然后两个对象之间的 Date 比较
visper
2023-12-18 10:58:51 +08:00
直接问 chatgpt:java 中对 list 里面的 bean 按 bean 的 aTime 字段排序
godleon
2023-12-18 11:04:51 +08:00
@chendy 你可复现一下 是不对的
xianyv
2023-12-18 11:04:58 +08:00
@godleon #2 建议直接百度
JackCh3ng
2023-12-18 11:10:10 +08:00
优先队列?
JackCh3ng
2023-12-18 11:15:04 +08:00
@JackCh3ng
或者 Bean 实现 Comparator 自己比较也行啊,
或者用 hutool 的 DateUtil 先把 Bean 里的 aTime 和 bTime 比较一下找到最新的,拿这个最新的和其他的 Bean 比较,sort 排序就行。
脑子还是自己多动动比较好。
chendy
2023-12-18 11:24:32 +08:00
帮人帮到底了,说实话这帖子放十年前百度 java 吧我都直接删的,真就硬伸手啊
xx.sort(Comparator.comparing(x -> {
if (x.getA().compareTo(x.getB()) > 0) {
return x.getA();
} else {
return x.getB();
}
}));
XiFanL1
2023-12-18 11:25:29 +08:00
import java.util.*;
import java.util.stream.Collectors;

public class Bean {
Date aTime;
Date bTime;

// getters and setters

public Date getLatestTime() {
return aTime.after(bTime) ? aTime : bTime;
}
}

public class Main {
public static void main(String[] args) {
List<Bean> beans = new ArrayList<>();

// add beans to the list

List<Bean> sortedBeans = beans.stream()
.sorted(Comparator.comparing(Bean::getLatestTime).reversed())
.collect(Collectors.toList());

// now sortedBeans is sorted by the latest time in each bean
}
}
eddiechow
2023-12-18 11:26:56 +08:00
@chendy 你这个是先按 atime 排,再按 btime 排; OP 的需求其实是按 atime 和 btime 两个时间比较的更新(更大)的时间降序排;
不如这样吧,增加 xtime ,先对 list forEach 比较 atime 和 btime ,把更新的时间赋值到 xtime ,然后再对 xtime 降序排序即可,OP 可行?@godleon
zydxn
2023-12-18 11:27:09 +08:00
楼上都直接帮你写出来了...

推荐你看本书吧

https://book.douban.com/subject/26346017/
godleon
2023-12-18 11:30:21 +08:00
@chendy 大哥 你能回显一下 在回帖吗?
Kyle18Tang
2023-12-18 11:31:36 +08:00
@chendy #10 其实看你 3 楼写的思路,就算复现不了,作为一个开发人员也该知道怎么改了,而不是继续抱怨说复现不了。
yazinnnn0
2023-12-18 11:31:39 +08:00
list.sortBy {it -> minOf(it.a, it.b) }
godleon
2023-12-18 11:31:44 +08:00
@chendy 还是你真的理解不了 问题呢
eddiechow
2023-12-18 11:32:14 +08:00
@chendy #10 第二次的实际运行结果还是和需求不一致😂
Ericcccccccc
2023-12-18 11:32:25 +08:00
搜 java 自定义结构体排序
eddiechow
2023-12-18 11:35:54 +08:00
其实,题目很简单,绝对的绝大多数 v 友都人为很简单,但往往在回答这种简单问题的准确答案时却会放一些简单的错(手滑、笔误、需求理解不清等等😂);(纯提供思路的除外)

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

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

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

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

© 2021 V2EX