我渴望在我的程序中使用 Guava的RangeSets 。尽管添加和合并范围的功能,我也对" size"我的范围。
一些评论:
这似乎是没有内置的东西(或者我没有看到它),我想知道是否有明确的理由反对这个概念(这意味着我不应该实现一些getSize ()函数我自己)或不。
让我们看看我的用例:
RangeSet<Integer> usageTicks = TreeRangeSet.create();
usageTicks.add(Range.closedOpen(3, 7));
usageTicks.add(Range.closedOpen(12,18));
usageTicks.add(Range.closedOpen(18, 23));
int size = usageTicks.hypotheticalGetSizeFunction(); // size = 15
是否有任何理由反对以下内容:
Set<Range<Integer>> setOfRanges = usageTicks.asRanges();
int sum = 0;
for(Range<Integer> range : setOfRanges)
sum += (range.upperEndpoint() - range.lowerEndpoint());
答案 0 :(得分:6)
Guava的Range
只需要一个附带类型的东西:它们实现Comparable
。
但并非所有实施Comparable
的人都有距离概念。例如,你如何测量两个String
之间的距离?
这就是为什么Guava还有DiscreteDomain
和ContiguousSet
;对于前者,您有next()
,prev()
和distance()
等方法,这是您感兴趣的方法。 Guava的网站上有一个article。