【发布时间】:2019-04-28 00:24:32
【问题描述】:
我有一个地图存储指标名称和范围,代表每个指标的生存期。这样存放很方便:
private Map<String, Range<Long>> metricRanges = new HashMap<>();
当我需要检查给定的时间戳是否在 Range 中时,我只需检索键的 Range,然后检查 Range 是否包含时间戳。
Range<Long> rangeOfDates = metricRanges.get(key);
if (rangeOfDates != null && rangeOfDates.contains(timestamp)) {
return true;
}
但是,我遇到了需要使用不提供 Range 功能的 14.0 之前的 Google Guava 库的情况。使用 Ranges 可以适当地替换数据结构以允许检查给定值是否在 Range 中?
目前我正在考虑创建一个List<Long> ranges,其中包含代表上限和下限的两个值。这将允许我检查时间戳是否在这样的“范围”内:
private Map<String, List<Long>> metricRanges = new HashMap<>();
List<Long> rangeOfDates = metricRanges.get(key);
if (timestamp >= rangeOfDates.get(0) && timestamp <= rangeOfDates.get(1)) {
return true;
}
我是否缺少可以实现的更多可选解决方案,例如使用 Guava pre 14.0?
UPD: 刚刚找到了一些与我正在寻找的东西相近的东西 - 来自 Apache commons-lang 的 Range 类。特别是LongRange 实现。
【问题讨论】:
-
"创建列表
范围" List包含零个或多个值。您似乎只需要 2 个值。创建一个专门建模的类。
标签: java collections guava