我正在使用Spring Boot应用程序,并尝试基于Schedule POJO类的timeStart
最早获取tag
。
我有一个带有getter和setter方法的简单bean-
Schedule.java
public class Schedule {
private String id;
private String tag;
private String timeStart;
}
当我对此类列表进行for循环时,如下所示:-
List<Schedule> schedules = someAPI();
for (Schedule schedule : schedules) {
LOGGER.info("schedule : "+schedule );
}
然后我得到以下输出:
schedule: [ID = 561, Tag = A1, timeStart = 2019-07-26 15:33:00]
schedule: [ID = 562, Tag = A1, timeStart = 2019-07-24 11:33:00]
schedule: [ID = 563, Tag = A1, timeStart = 2019-07-25 12:33:00]
schedule: [ID = 564, Tag = A2, timeStart = 2019-07-26 14:33:00]
schedule: [ID = 565, Tag = A2, timeStart = 2019-07-26 15:33:00]
现在,我想通过
timeStart
得到最小的tag name
并存储在DB中,所以我需要类似以下的输出;-A1 -> 2019-07-24 11:33:00
A2 -> 2019-07-26 14:33:00
我尝试了以下操作(将timeStarts按标签名称放置在哈希图中)-
Map < String, ArrayList < String >> timeStartsByTag = new HashMap < String, ArrayList < String >> ();
ArrayList < String > timeStarts = new ArrayList < String > ();
for (Schedule schedule: schedules) {
if (timeStarts.isEmpty()) {
timeStarts.add(schedule.getTimeStart());
}
if (!timeStarts.isEmpty() && timeStartsByTag.containsKey(schedule.getTag())) {
timeStarts.add(schedule.getTimeStart());
}
timeStartsByTag.put(schedule.getTag(), timeStarts);
}
它不起作用。
最佳答案
在当前代码中,请勿比较timeStart
值。所以它行不通。
此外,所有可能通过Collectors.toMap()
重载而简化的功能都需要合并功能:
List<Schedule> schedules = someAPI();
Map<String, String> map =
schedules.stream()
.collect(toMap(Schedule::getTag, Schedule::getTimeStart,
(t1,t2)-> t1.compareTo(t2) < 0 ? t1 : t2))
);
String.compareTo()
之所以起作用,是因为字典顺序符合您当前的要求,但这很脆弱。使用LocalDateTime
或Instant
表示2019-07-24 11:33:00
更有意义。关于java - 根据bean属性值获取最早的时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57674688/