Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建com.google.common.collect.Range并更改一个boud?_Java_Range_Guava - Fatal编程技术网

Java 如何创建com.google.common.collect.Range并更改一个boud?

Java 如何创建com.google.common.collect.Range并更改一个boud?,java,range,guava,Java,Range,Guava,我需要创建新的范围对象,只更改一个(下限或上限)。其他边界必须保持不变 最方便的方法是什么 我看到了方法com.google.common.collect.Range#Range(C lower,BoundType lowerType,C upper,BoundType upperType),但是当我需要更改lower时,我必须从我的范围中复制上限值-如果存在上限,请小心 它看起来相当难看(下面的例子)。我需要类似的代码来改变上限。有没有更简单的方法 if (range.hasUpperBoun

我需要创建新的
范围
对象,只更改一个(下限或上限)。其他边界必须保持不变

最方便的方法是什么

我看到了方法
com.google.common.collect.Range#Range(C lower,BoundType lowerType,C upper,BoundType upperType)
,但是当我需要更改lower时,我必须从我的范围中复制上限值-如果存在上限,请小心

它看起来相当难看(下面的例子)。我需要类似的代码来改变上限。有没有更简单的方法

if (range.hasUpperBound()) {
    range = Range.range(value, BoundType.CLOSED, range.upperEndpoint(), timeSpend.upperBoundType());
} else {
    range = Range.upTo(value, BoundType.CLOSED);
}

Range
是不可变的,您只能基于另一个
Range
创建一个新的
Range
。就像你在例子里说的


有了这句话,您就可以创建一个helper方法。

我提供了以下通用helper方法(它们创建了双闭合范围,这是我需要的)


只是一个小提示,与其称之为
setLowerBound
setUpperBound
,我认为
使用lowerbound
使用upperbound
更合适。
 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);
    }
}
myRange= setLowerBound(myRange, newLowerValue);
myRange= setUpperBound(myRange, newUpperValue);