Я решил создать карту для хранения названий метрик и диапазонов, представляющих периоды жизни для каждой метрики. Сначала я использовал TreeRangeMap
для хранения диапазонов, но так как каждая метрика содержит один диапазон, я переключился на диапазоны, как показано ниже.
Моя цель - сохранить последний временной диапазон в DEFAULT_METRICS_MAP, когда я получу Range
для метрики от внешнего API.
Когда у меня был 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));
}
Каков будет правильный способ сравнения диапазонов, если они не заключены в TreeRangeMap?
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);
}