Java 谷歌番石榴系列联盟

Java 谷歌番石榴系列联盟,java,range,guava,intervals,Java,Range,Guava,Intervals,我正在编写一些需要处理数字范围的代码。我正在使用谷歌番石榴图书馆;我需要一些基本的操作,比如并集和交集 查看Google Guava文档,使用range.intersection(range)方法可以很容易地实现范围之间的相交,但我找不到任何union方法;唯一可行的选择似乎是使用RangeSet类,但它会带来更多问题:例如,滚动RangeSet中的每个范围不是很直观 是否有任何方法可以使用谷歌番石榴或其他库合并集合 如果有更好/更直观的选项,甚至可以更改库。span将采用两个相互接触的范围的并

我正在编写一些需要处理数字范围的代码。我正在使用谷歌番石榴图书馆;我需要一些基本的操作,比如并集和交集

查看Google Guava文档,使用range.intersection(range)方法可以很容易地实现范围之间的相交,但我找不到任何union方法;唯一可行的选择似乎是使用RangeSet类,但它会带来更多问题:例如,滚动RangeSet中的每个范围不是很直观

是否有任何方法可以使用谷歌番石榴或其他库合并集合


如果有更好/更直观的选项,甚至可以更改库。

span
将采用两个相互接触的范围的并集


在任何其他情况下,您都必须使用
RangeSet
,尽管我不太清楚它的不直观之处。

如果我使用RangeSet类,正如我尝试的那样,intersect和span函数使用Range作为输入,而不是RangeSet。这意味着,如果我想处理两个具有交集或并集的Rangeset,我应该处理其中一个Rangeset中的每个Rangeset(而另一个Rangeset将用于调用函数);我在文档中找不到这样的方法(展开范围集的方法)。例如,对我来说,使用Rangeset.intersect(otherRangeset)方法是很直观的。要获得两个
Rangeset
s的并集,请调用
rangeSet1.addAll(rangeSet2)
。要使两个
RangeSet
s相交,请调用
rangeSet1.removeAll(rangeSet2.complete())
。要迭代
范围集
,请调用
asSetOfRanges()
以获取
范围集
,您可以像正常情况一样进行迭代。一般来说,它基于Map和Set等类公开的API,例如,
Map
要求您使用
entrySet
对其进行迭代。感谢您的帮助。我知道API的设计有一个明确的目的,在本例中是与Map/Set类的相似性,但我正在寻找一种更“特定目的”的方法。但是,我会尝试根据您给我的建议重写代码。