Java-搜索对象列表以获取两个日期之间的日期

问题描述 投票:0回答:1

我有一个已排序的对象列表(从头开始排序):列表位置详细信息

---------------------------------------------------------------------------------------------
| 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的第一个和最后一个索引(对于重复值(来自))
  3. 搜索列表如果firstIndex> listSize / 2 firstIndex = firstIndex,LastIndex = listSize-1如果firstIndex

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

java algorithm collections binary-search
1个回答
0
投票

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

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

  • 使用Set,您需要创建两个LocationDetail对象以在查询中用作“从”和“到”
  • 使用地图(由“起始”值键入),您需要处理多个位置详细信息具有相同“起始”时间的情况。因此,您可能需要为每个“自”值存储一些位置详细信息集合,并对返回的flatMap]执行一些submap(from, to).values().stream()
© www.soinside.com 2019 - 2024. All rights reserved.