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

标签 java algorithm collections binary-search

我有一个排序的对象列表(来自已排序):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. 将属性 From 列表提取到 fromTimes 列表
  2. 编写了一个自定义二分搜索实现:方法 LocalDateTime[] getFirstLastIndex(List fromTimes, LocalDateTime locationTime) 此方法返回 locationTime 的第一个和最后一个索引(对于重复值(From))
  3. 搜索列表 如果firstIndex>listSize/2firstIndex=firstIndex,LastIndex=listSize-1 如果firstIndex

我的问题:
有更好的解决办法吗?

最佳答案

由于您不需要在列表中保留重复项,因此我会尝试将其换成 TreeSetTreeMap,它们提供诸如 之类的方法submap(fromElement, toElement)submap(fromKey, toKey) 分别 - 各有两种风格,在 SortedSet/NavigableSet 和 SortedMap/NavigableMap 中声明,因此您可以根据需要控制是否from 和two 是包含的或排除的。

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

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

关于Java - 在对象列表中搜索 2 个日期之间的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62378534/

相关文章:

java - Activity onCreate 是否会在其中调用 fragment 的每个 NewInstance?

java - 多次使用@Autowired

algorithm - 钉子游戏 : best place to place ball such that it lands in the target cell

python - 列表中元素的对称二分匹配

java - 带有整数的集合,需要自行增减

c# - 集合中项目的可观察集合属性发生了变化

ruby-on-rails - Ruby Rails 集合选择显示空白 "prompt"值?

java - Firebase JAVA 管理 sdk FirebaseAuthException

Java CRTP 和通配符 : Code compiles in Eclipse but not `javac`

c# - 开源图形布局库