如何创建 com.google.common.collect.Range 改变一个布德?
How to create com.google.common.collect.Range with one boud changed?
我需要创建新的 Range
对象,只更改一个(下限或上限)边界。其他绑定必须不变。
最方便的方法是什么?
我看到了方法 com.google.common.collect.Range#range(C lower, BoundType lowerType, C upper, BoundType upperType)
,但是当我需要更改较低值时,我必须从我的范围复制上限值 - 如果 upperBound 存在则要小心。
它看起来很丑(下面的示例)。我需要类似的代码来更改上限。有更简单的方法吗?
if (range.hasUpperBound()) {
range = Range.range(value, BoundType.CLOSED, range.upperEndpoint(), timeSpend.upperBoundType());
} else {
range = Range.upTo(value, BoundType.CLOSED);
}
Range
是不可变的,您只能根据另一个 Range
创建一个新的 Range
。就像您在示例中给出的那样。
俗话说,你总是可以创建一个辅助方法。
我带来了以下通用辅助方法(它们创建了我需要的双闭范围)
private static <T extends Comparable> Range<T> withLowerBound(Range<T> range,
T lowerEndpoint) {
if (range.hasLowerBound()) {
return Range.closed(lowerEndpoint, range.upperEndpoint());
} else {
return Range.atLeast(lowerEndpoint);
}
}
private static <T extends Comparable> Range<T> withUpperBound(Range<T> range,
T upperEndpoint) {
if (range.hasLowerBound()) {
return Range.closed(range.lowerEndpoint(), upperEndpoint);
} else {
return Range.atMost(upperEndpoint);
}
}
因为 Range 是不可变的,所以必须按如下方式使用它们
myRange= setLowerBound(myRange, newLowerValue);
myRange= setUpperBound(myRange, newUpperValue);
我需要创建新的 Range
对象,只更改一个(下限或上限)边界。其他绑定必须不变。
最方便的方法是什么?
我看到了方法 com.google.common.collect.Range#range(C lower, BoundType lowerType, C upper, BoundType upperType)
,但是当我需要更改较低值时,我必须从我的范围复制上限值 - 如果 upperBound 存在则要小心。
它看起来很丑(下面的示例)。我需要类似的代码来更改上限。有更简单的方法吗?
if (range.hasUpperBound()) {
range = Range.range(value, BoundType.CLOSED, range.upperEndpoint(), timeSpend.upperBoundType());
} else {
range = Range.upTo(value, BoundType.CLOSED);
}
Range
是不可变的,您只能根据另一个 Range
创建一个新的 Range
。就像您在示例中给出的那样。
俗话说,你总是可以创建一个辅助方法。
我带来了以下通用辅助方法(它们创建了我需要的双闭范围)
private static <T extends Comparable> Range<T> withLowerBound(Range<T> range,
T lowerEndpoint) {
if (range.hasLowerBound()) {
return Range.closed(lowerEndpoint, range.upperEndpoint());
} else {
return Range.atLeast(lowerEndpoint);
}
}
private static <T extends Comparable> Range<T> withUpperBound(Range<T> range,
T upperEndpoint) {
if (range.hasLowerBound()) {
return Range.closed(range.lowerEndpoint(), upperEndpoint);
} else {
return Range.atMost(upperEndpoint);
}
}
因为 Range 是不可变的,所以必须按如下方式使用它们
myRange= setLowerBound(myRange, newLowerValue);
myRange= setUpperBound(myRange, newUpperValue);