如何对使用番石榴范围值作为键的集合进行排序?
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。
我可以不用手动排序来排序吗?如果可以,怎么做?
我有以下地图,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。
我可以不用手动排序来排序吗?如果可以,怎么做?