我在比较日期方面遇到了问题。
我正在开发一个停车场应用程序,有一些X可用的地方,我在sql中存储开始日期和结束日期(保留停车位)。我的想法是,如果有超过x个重叠天数的时刻,请从ArrayList中检查预约。
ArrayList<Reservering> alleReserveringen = reserveringDAO
.getAlleReservering();
int totaal = 0;
for (int i = 0; i < alleReserveringen.size(); i++) {
for (int j = 0; j < alleReserveringen.size(); j++) {
if (alleReserveringen.get(i).getVertrek()
.before(alleReserveringen.get(j).getAankomst())
|| alleReserveringen
.get(i)
.getAankomst()
.before(alleReserveringen.get(j)
.getVertrek())) {
//overlapping
} else {
//not overlapping
}
}
}
这就是我用嵌套for循环来比较每个日期和所有其他日期等等。但这是我被卡住的地方。我可以在某处存储重叠日期吗?
答案 0 :(得分:1)
这是Guava的RangeSet
的完美用例,它有效地将范围存储为起始端对,合并重叠并提供O(log n)contains
检查。
如果您尝试将起始端对映射到值,还有RangeMap
。不幸的是,目前还没有RangeMultimap
,但你可以轻松地创建一个包装器。