gpt4 book ai didi

java - 查找最近的前一个日期

转载 作者:行者123 更新时间:2023-12-01 13:11:56 27 4
gpt4 key购买 nike

我有一个日期列表和一个目标日期对象。我需要找到最近的先前日期(在目标日期之前)。我已经尝试过以下方法,但我认为它仅适用于前一个日期。

private Date getDateNearest(List<Date> dates, Date targetDate) {
Date returnDate = targetDate;

for (Date date : dates) {
if (date.compareTo(targetDate) <= 0 && date.compareTo(returnDate) > 0) {
returnDate=date;
}
}

return returnDate;
}

最佳答案

标准库一行

由于 Date 实现了 Comparable,这应该很简单

Date previousDate = new TreeSet<Date>(dates).lower(targetDate);

显然,为了单行的便利,这会带来一些额外的开销。

来自Javadoc for lower() :

Returns the greatest element in this set strictly less than the given element, or null if there is no such element.

编辑:查看您的代码,似乎您还想返回 targetDate 本身(如果它在集合中),因此您可以使用 floor(targetDate ) 代替。

Guava 方法

这是一个使用 Guava 的性能更高的单行代码:

Date earlierDate = Ordering.natural().max(
Iterables.filter(dates, Range.lessThan(targetDate)));

与纯 Java 方法不同,这不需要填充额外的数据结构,并且只需要遍历一次列表。它创建一个延迟填充的 Iterable,仅包含小于 targetDate 的日期,然后获取该可迭代的最大值。

同样,如果您希望它也接受 targetDate,请使用 Range.atMost 而不是 Range.lessThan

关于java - 查找最近的前一个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22785597/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com