Java-从Guava获取RangeMap中的键存在时,RangeMap返回null

时间:2018-10-25 14:26:19

标签: java collections guava

我试图实现一种在RangeMap中搜索字符串的方法。我想检查metricName是否在RangeMap中以及它是否存在于给定的时间范围内。

private static RangeMap<Long, String> salesRangeMap = TreeRangeMap.create();
salesRangeMap.put(
      Range.closed(1540038517L, 1540645753L), "Metric1");

public static boolean isMetricPresent(String metricName, long theKey) {
             String metricFromMap = Objects.requireNonNull(salesRangeMap.get(theKey));
    if (StringUtils.containsIgnoreCase(metricName, metricFromMap)) {
        return true;
    } 
       return false;  
}

salesRangeMap中的键是从October 20, 2018 12:28:37 PMOctober 27, 2018 1:09:13 PM的范围(以人类可读的格式)。

但是,当我这样调用isMetricPresent方法并将其传递给System.currentTimeMillis()作为键(等于此时间戳值1540476195830-> October 25, 2018 2:03:15.830 PM)时,它对此调用null返回salesRangeMap.get(theKey)

long currentTime = System.currentTimeMillis(); // 1540476195830
boolean isPresent = isMetricPresent("Metric1", currentTime);

据我目前的理解,键currentTime位于salesRangeMap的范围内。我目前的方法有什么问题?

1 个答案:

答案 0 :(得分:3)

好吧,在我看来1540645753 <1540476195830-您在地图中存储秒,但是查询毫秒。