У меня есть следующие карты, с Range<Integer>
является ключевым:Как сортировать коллекцию, которая использует значения диапазона Guava как ключи?
| Range<Integer> | Set<Range<BigDecimal>>
------------------------------------------------------------
| 1..100 | [0.01..1.00], [2.01..15.00], [1.01..2.00]
------------------------------------------------------------
| 151..250 | [0.01..1.00], [2.01..15.00], [1.01..2.00]
------------------------------------------------------------
| 101..150 | [1.01..7.00], [0.01..1.00]
------------------------------------------------------------
У меня также есть следующие реализации компаратора:
public class RangeComparator<T extends Comparable<T>> implements Comparator<Range<T>> {
@Override
public int compare(Range<T> first, Range<T> second) {
int comparatorResult = first.lowerEndpoint().compareTo(second.lowerEndpoint());
return comparatorResult == 0 ? first.upperEndpoint().compareTo(second.upperEndpoint()) : comparatorResult;
}
}
Я хотел бы отсортировать значения в карте, используя этот компаратор , а затем отсортировать саму карту, таким образом, получить следующий результат:
| Range<Integer> | Set<Range<BigDecimal>>
------------------------------------------------------------
| 1..100 | [0.01..1.00], [1.01..2.00], [2.01..15.00]
------------------------------------------------------------
| 101..150 | [0.01..1.00], [1.01..7.00]
------------------------------------------------------------
| 151..250 | [0.01..1.00], [1.01..2.00], [2.01..15.00]
------------------------------------------------------------
класс гуавы Range является окончательным и не implemen t Сопоставимо.
Могу ли я сортировать это, не выполняя сортировку вручную? Если да, то как?
'TreeSet' и' TreeMap' имеют конструкторы, которые принимают явный 'Comparator'. Что мешает вам это использовать? –
Почему вы не можете использовать TreeMap или TreeSet? – immibis
@AndyTurner Ваш ответ был прав, пожалуйста, разместите его еще раз. Несвязанный поставщик TreeSet, который использовал конструктор по умолчанию, выбрал ClassCastException, и я приписал это сортировке карты, которую я пытался сделать. Пользовательский компаратор работает нормально. –