Java - 从 Guava RangeMap returns 获取 null 而键存在于范围中
Java - get from Guava RangeMap returns null while key is present in the Range
我尝试实现一种在 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 PM
到 October 27, 2018 1:09:13 PM
的范围(以人类可读的格式)。
然而,当我像这样调用 isMetricPresent
方法并将其作为键传递时 System.currentTimeMillis()
(等于此时间戳值 1540476195830
-> October 25, 2018 2:03:15.830 PM
) , 它 returns null
在此调用 salesRangeMap.get(theKey)
.
long currentTime = System.currentTimeMillis(); // 1540476195830
boolean isPresent = isMetricPresent("Metric1", currentTime);
据我目前的理解,键 currentTime
出现在 salesRangeMap
的范围内。我目前的做法有什么问题?
嗯,在我看来 1540645753
< 1540476195830
- 您在地图中存储秒数,但查询毫秒数。
我尝试实现一种在 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 PM
到 October 27, 2018 1:09:13 PM
的范围(以人类可读的格式)。
然而,当我像这样调用 isMetricPresent
方法并将其作为键传递时 System.currentTimeMillis()
(等于此时间戳值 1540476195830
-> October 25, 2018 2:03:15.830 PM
) , 它 returns null
在此调用 salesRangeMap.get(theKey)
.
long currentTime = System.currentTimeMillis(); // 1540476195830
boolean isPresent = isMetricPresent("Metric1", currentTime);
据我目前的理解,键 currentTime
出现在 salesRangeMap
的范围内。我目前的做法有什么问题?
嗯,在我看来 1540645753
< 1540476195830
- 您在地图中存储秒数,但查询毫秒数。