如何对使用番石榴范围值作为键的集合进行排序?

How to sort a collection that uses Guava Range values as keys?

我有以下地图,Range<Integer> 是关键:

| 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]
------------------------------------------------------------

Guava Range class 是最终版本,未实现 Comparable。

我可以不用手动排序来排序吗?如果可以,怎么做?

使用TreeMap and TreeSet的构造函数,将Comparator作为参数,例如

public TreeMap(Comparator<? super K> comparator)

Constructs a new, empty tree map, ordered according to the given comparator.

请注意,TreeMap的键或TreeSet的条目没有限制需要实现Comparable