Java 从范围列表中提取间隙<;日期>;
我有一个基于番石榴库的Java 从范围列表中提取间隙<;日期>;,java,algorithm,guava,date-range,Java,Algorithm,Guava,Date Range,我有一个基于番石榴库的范围的列表,它们从不重叠 2001-01-10&rightarrow2001-01-15 2001-01-20&rightarrow2001-01-22 2001-01-28&rightarrow2001-01-29 然后,我有一个参考范围: RangeSet<Date> exclusiveRangeSet = rangeSet.complement().subRangeSet(referenceRange); 2001-01-01&rightarrow
范围的列表,它们从不重叠
2001-01-10
&rightarrow2001-01-15
2001-01-20
&rightarrow2001-01-22
2001-01-28
&rightarrow2001-01-29
然后,我有一个参考范围:
RangeSet<Date> exclusiveRangeSet = rangeSet.complement().subRangeSet(referenceRange);
2001-01-01
&rightarrow2001-01-31
我想找出列表和参考范围之间的所有独家差距:
RangeSet<Date> exclusiveRangeSet = rangeSet.complement().subRangeSet(referenceRange);
2001-01-01
&rightarrow2001-01-10
2001-01-15
&rightarrow2001-01-20
2001-01-22
&rightarrow2001-01-28
2001-01-29
&rightarrow2001-01-31
在本例中,日期对象很简单,但实际上,它们的格式可能会因其计时单位而异
有没有一种不需要太多编码就能得到这个结果的正确方法?我的方法是这样的
RangeSet<Date> rangeSet = TreeRangeSet.create();
rangeSet.add(referenceRange);
for (Range<Date> range : rangesToRemove) {
rangeSet.remove(range);
}
for (Range<Date> exclusiveRange : rangeSet.asRanges()) {
...
}
RangeSet RangeSet=TreeRangeSet.create();
rangeSet.add(referenceRange);
用于(范围:rangesToRemove){
范围集。删除(范围);
}
对于(范围独占性:rangeSet.asRanges()){
...
}
如果正确操作范围边界,则应以所需的格式获取它们。您可以从范围列表中/a并使用其与获取参考范围中的独占间隙:
RangeSet<Date> exclusiveRangeSet = rangeSet.complement().subRangeSet(referenceRange);
RangeSet exclusiveRangeSet=RangeSet.complete().subRangeSet(referenceRange);
列表中的范围是否重叠?否,添加时我会合并它们,因此输入列表是干净的。仅供参考:番石榴树集可以为您合并/合并它们。有关详细信息,请参阅。对,但我不认为我可以将它们与TreeSet合并,因为范围由数据库记录支持。我必须相应地合并它们并更新数据库。另一方面,间隙不是物理存储的。非常感谢。我完全忽略了RangeSet对象。