查找时间序列中的值更改

时间:2016-02-22 02:37:24

标签: java hashmap time-series treemap

我有一张地图,以下列格式存储一个人工资的时间序列数据

HashMap<Date,Double> salaryHistory;

变量salaryHistory可以包含从1AD到2100AD的数据。

我正在使用subMap来过滤hashmap中的数据,但我在以下场景中面临挑战

考虑这样的人的薪水

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

当用户在1970年1月1日到1972年1月1日之间询问工资时,subMap返回&#34; null&#34;,但实际上它应该返回100,因为,这个人&#39 1969年的工资为100,直到1979年才改变。

有一种简单的方法吗?就像一个图书馆。

请提供宝贵的建议

2 个答案:

答案 0 :(得分: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}

答案 1 :(得分:0)

如果您不必使用x = x * y,请考虑将其替换为HashMap。然后,您可以使用TreeMap.floorEntry()来获取相关的Entry