2016-02-22 39 views
4

值的變化我有一個地圖存儲一個人的工資的時間序列數據,格式如下查找時間序列

HashMap<Date,Double> salaryHistory; 

變量salaryHistory可以從1AD甚至2100AD數據。

我使用subMap過濾從HashMap中的數據,但我在下面的情形

面臨的一個挑戰,考慮的人喜歡這個

Jan-01-1969, 100 
Jan-01-1979, 200 

工資當用戶要求的薪水1970年1月1日至1972年1月1日,subMap返回「null」,但實際上它應該返回100,因爲該人的工資在1969年是100,並且直到1979年才改變。

有沒有簡單的方法去做這個?像圖書館一樣。

請請提供您的寶貴建議

+1

您的邏輯不能測試給定的日期是否在兩個鍵之間,並提供兩個值中較低的值? – bphilipnyc

回答

1

我發現,如果你使用一個SortedMap,而不是一個HashMap,你得到你所期望的行爲:

Date j1969 = DateTimeUtils.convertStringToDate("1969-01-01"); 
    Date j1974 = DateTimeUtils.convertStringToDate("1974-01-01"); 
    Date j1979 = DateTimeUtils.convertStringToDate("1979-01-01"); 
    Date j1989 = DateTimeUtils.convertStringToDate("1989-01-01"); 

    TreeMap<Date, Double> treemap = new TreeMap<Date, Double>(); 
    SortedMap<Date, Double> treemapincl = new TreeMap<Date, Double>(); 

    // populating tree map 
    treemap.put(j1969, 100.0); 
    treemap.put(j1979, 200.0); 
    treemap.put(j1989, 300.0); 

    treemapincl=treemap.subMap(j1969,j1974); 
    System.out.println("Sub map values: "+treemapincl); 

輸出:

Sub map values: {Wed Jan 01 00:00:00 GMT-05:00 1969=100.0}