【发布时间】:2021-08-18 09:31:21
【问题描述】:
我有一个 LocalDate 对象列表 (dates),我想在列表中找到最接近给定日期 (milestoneDate) 的条目。
最接近意味着日期可能在milestoneDate 之前或之后,但差异最小。例如,milestoneDate 前一天的某事会比milestoneDate 后 2 天的某事更接近。
到目前为止,我最好的想法是将dates 中的值转换为EpochSecond,然后获取该值与milestoneDate 的toEpochSecond 之间的差的绝对值,然后选择最小值。
long milestoneSeconds = milestoneDate.atStartOfDay().toEpochSecond(ZoneOffset.UTC);
return dates.stream().sorted((x, y) -> {
long xDiff = Math.abs(x.atStartOfDay().toEpochSecond(ZoneOffset.UTC) - milestoneSeconds);
long yDiff = Math.abs(y.atStartOfDay().toEpochSecond(ZoneOffset.UTC) - milestoneSeconds);
return (int) (xDiff - yDiff);
}).findFirst();
虽然我怀疑这会起作用,但感觉有点沉重。有没有更优雅的方法来做到这一点?
【问题讨论】: