簡體   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