【发布时间】:2018-10-30 14:11:12
【问题描述】:
我决定创建一个地图来存储指标名称和代表每个指标的生存期的范围。起初我使用TreeRangeMap 来存储 Ranges,但由于每个 Metric 包含一个 Range,我切换到 Ranges,如下所示。
我的目标是在收到来自外部 API 的度量标准 Range 时,将最新时间范围保留在 DEFAULT_METRICS_MAP 中。
当我有一个代表 Ranges 的 TreeRangeMap 时,比较它们很容易。我向 TreeRangeMap 添加了新指标,然后得到了这样的最大范围:
private static Optional<Range<Long>> maxRange(TreeRangeSet<Long> rangeSet) {
Set<Range<Long>> ranges = rangeSet.asRanges();
return ranges.stream().max(Comparator.comparing(Range::upperEndpoint));
}
如果没有将 Ranges 包装到 TreeRangeMap 中,比较 Ranges 的正确方法是什么?
public static final Map<String, Range<Long>> DEFAULT_METRICS_MAP;
static {
Map<String, Range<Long>> theMap = new HashMap<>();
theMap.put("Metric1", Range.closed(Long.MIN_VALUE, Long.MAX_VALUE));
theMap.put("Metric2", Range.closed(10L, 20L));
theMap.put("Metric3", Range.closed(30L, 50L));
METRICS_MAP = Collections.unmodifiableMap(theMap);
}
【问题讨论】:
-
你期望的输出是什么?
-
标签: java collections java-8 guava comparator