У меня есть карта, хранящая названия метрик и диапазоны, представляющие периоды реального времени для каждой метрики.Хранить его было очень удобно следующим образом:
private Map<String, Range<Long>> metricRanges = new HashMap<>();
Когда мне нужно было проверить, находится ли данная временная метка в диапазоне, я просто извлек диапазон для ключа, а затем проверил, содержит ли диапазон временную метку..
Range<Long> rangeOfDates = metricRanges.get(key);
if (rangeOfDates != null && rangeOfDates.contains(timestamp)) {
return true;
}
Однако я столкнулся с ситуацией, когда необходимо использовать библиотеку Google Guava до 14.0, которая не обеспечивает функциональность 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: только что нашел что-то близкое к тому, что я искал - класс Range от Apache commons-lang
.В частности, реализация LongRange
.