从范围列表中提取间隙<Date>
Extract gaps from a List of Range<Date>
我有一个基于 Guava 库的 Range<Date>
列表,它们从不重叠。
2001-01-10
→ 2001-01-15
2001-01-20
→ 2001-01-22
2001-01-28
→ 2001-01-29
那么,我有一个参考范围:
2001-01-01
→ 2001-01-31
我要找出所有独家列表和参考范围之间的差距:
2001-01-01
→ 2001-01-10
2001-01-15
→ 2001-01-20
2001-01-22
→ 2001-01-28
2001-01-29
→ 2001-01-31
在这个例子中,Date 对象很简单,但实际上它们的格式可能会因 ChronoUnit 而异。
有没有不用太多编码就能得到这个结果的正确方法?
我的方法类似于
RangeSet<Date> rangeSet = TreeRangeSet.create();
rangeSet.add(referenceRange);
for (Range<Date> range : rangesToRemove) {
rangeSet.remove(range);
}
for (Range<Date> exclusiveRange : rangeSet.asRanges()) {
...
}
如果您正确操作范围界限,您应该以您想要的格式获取它们。
您可以create/build a RangeSet from your list of Range<Date>
and use its complement() with subRangeSet(Range)获取您参考范围内的独家差距:
RangeSet<Date> exclusiveRangeSet = rangeSet.complement().subRangeSet(referenceRange);
我有一个基于 Guava 库的 Range<Date>
列表,它们从不重叠。
2001-01-10
→2001-01-15
2001-01-20
→2001-01-22
2001-01-28
→2001-01-29
那么,我有一个参考范围:
2001-01-01
→2001-01-31
我要找出所有独家列表和参考范围之间的差距:
2001-01-01
→2001-01-10
2001-01-15
→2001-01-20
2001-01-22
→2001-01-28
2001-01-29
→2001-01-31
在这个例子中,Date 对象很简单,但实际上它们的格式可能会因 ChronoUnit 而异。
有没有不用太多编码就能得到这个结果的正确方法?
我的方法类似于
RangeSet<Date> rangeSet = TreeRangeSet.create();
rangeSet.add(referenceRange);
for (Range<Date> range : rangesToRemove) {
rangeSet.remove(range);
}
for (Range<Date> exclusiveRange : rangeSet.asRanges()) {
...
}
如果您正确操作范围界限,您应该以您想要的格式获取它们。
您可以create/build a RangeSet from your list of Range<Date>
and use its complement() with subRangeSet(Range)获取您参考范围内的独家差距:
RangeSet<Date> exclusiveRangeSet = rangeSet.complement().subRangeSet(referenceRange);