繁体   English   中英

Java - 在对象列表中搜索两个日期之间的日期

[英]Java - Search a List of Objects for a date between 2 dates

我有一个排序的对象列表(来自已排序): List LocationDetail

---------------------------------------------------------------------------------------------
| id | Place      | Name   | From                  | To                   | Address
---------------------------------------------------------------------------------------------
| 2  | Office     | Mark   | 2020-06-02 08:00:00   | 2020-06-02 19:59:59  | Office_Address  |  
| 4  | Office     | John   | 2020-06-02 08:00:00   | 2020-06-02 19:59:59  | Office_Address  |  
| 1  | Home       | Mark   | 2020-06-01 20:00:00   | 2020-06-02 07:59:59  | Home_Address    |  
| 3  | Home       | John   | 2020-06-01 20:00:00   | 2020-06-02 07:59:59  | Home_Address    |
---------------------------------------------------------------------------------------------

我想搜索以下内容的详细信息:

地点、名称、位置时间

如果 locationTime 介于 From 和 To 之间,则返回该行。 (地点、名称、从和到的组合是唯一的)

我的解决方案:

  1. 将属性列表从时间提取到列表
  2. 写了一个自定义的二分查找实现:方法 LocalDateTime[] getFirstLastIndex(List fromTimes, LocalDateTime locationTime) 这个方法返回locationTime的第一个和最后一个索引(对于重复值(From))
  3. 搜索列表 If firstIndex > listSize/2 firstIndex = firstIndex, LastIndex = listSize-1 If firstIndex < listSize/2 firstIndex = firstIndex, LastIndex = listSize-1 (也一样)

我的问题:
有更好的解决方案吗?

由于您不需要在列表中保留重复项,因此我会尝试将其TreeSetTreeMap ,它们分别提供了subset(fromElement, toElement)submap(fromKey, toKey)之类的方法——每种都有两种风格,在 SortedSet/NavigableSet 和 SortedMap/NavigableMap 中声明,因此您可以在需要时控制 from 和两者是包含还是排除。

这并不简单(但仍然值得追求),因为:

  • 使用 Set 您需要创建两个LocationDetail对象以在查询中用作“from”和“to”
  • 使用 Map(由“from”值键入),您需要处理多个位置详细信息具有相同“from”时间的情况。 因此,您可能需要为每个“from”值存储一些位置详细信息集合,并在返回submap(from, to).values().stream()上执行一些flatMap

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM