2011-12-21 67 views
4

我有一個TreeMap的最後n個元素,看起來像這樣:如何獲得一個樹狀圖

TreeMap<Instant, HashMap<Type, Double>> 

即時值代表一天的時間;對於每個傳遞的小時,值都存儲在我的地圖中。 現在我想獲得這張地圖的最後24個元素(以便過去的日子)。我怎麼能這樣做?

乾杯

回答

2

您可以使用descendingMap調用來獲取地圖上的一個視圖,該視圖基本上是相反的順序,然後從該視圖獲取前24個條目(請撥打iterator等)。 (GuavaIterables提供一種限制迭代等有用的方法)

編輯:例如,爲了獲得最後的24個元素(以相反的順序,用番石榴),你可以使用:

List<HashMap<Type, Double>> lastValues = Lists.newArrayList 
    (Iterables.limit(map.descendingMap().values(), 24)); 
+0

太棒了,它的作品!謝謝! – 2011-12-21 13:44:57

3

使用TreeMap.tailMap()它。

+0

+1:鑰匙需要是24小時前的即時貼。 – 2011-12-21 11:17:43

+0

這裏的問題是,如果我使用tailMap(),我需要知道確切的元素,尾部應該在哪裏開始......因爲地圖總是在變化,所以這並不適用。 – 2011-12-21 11:19:35

+1

@NikolausHartlieb我認爲你需要確保在你獲取24個元素的過程中,地圖不會被改變。 (例如,獲取線程只能在HH:55之前啓動),否則無法爲您獲取正確的元素。例如您在10:59:59.990上獲取(通過tailMap或desendingMap)。數據集錯誤的概率非常高。 – Kent 2011-12-21 11:38:56

0

您可以將其設爲SortedMap<LocalDate, SortedMap<Hours, Map<Type, Double>>>,以便您可以從外部Map獲取最新日期。