Class Range<T extends Comparable<? super T>>
- All Implemented Interfaces:
Serializable
The class has some very simple methods for usability. For example contains(Comparable) method can tell user whether
this range contains argument or not. The contains(Range) helps to find out whether this range fully
enclosing argument or not.
For more details about how to use it, check out this article on vladmihalcea.com.
- Author:
- Edgar Asatryan, Vlad Mihalcea
- See Also:
-
Field Summary
Fields -
Method Summary
Modifier and TypeMethodDescriptionasString()static Range<BigDecimal>bigDecimalRange(String range) Creates theBigDecimalrange from provided string:static <T extends Comparable<? super T>>
Range<T>closed(T lower, T upper) Creates the closed range with provided bounds.static <T extends Comparable<? super T>>
Range<T>closedInfinite(T lower) Creates the left-bounded, left-closed and right-unbounded range with provided lower bound.static <T extends Comparable<? super T>>
Range<T>closedOpen(T lower, T upper) Creates the left-closed, right-open range with provided bounds.booleanDetermines whether this range contains this range or not.booleanDetermines whether this range contains this point or not.static <R extends Comparable<? super R>>
Range<R>emptyRange(Class<R> cls) Creates the empty range.booleaninthashCode()booleanbooleanhasMask(int flag) booleanstatic <T extends Comparable<? super T>>
Range<T>Creates the unbounded at both ends range with provided upper bound.static <T extends Comparable<? super T>>
Range<T>infiniteClosed(T upper) Creates the left-unbounded, right-bounded and right-closed range with provided upper bound.static <T extends Comparable<? super T>>
Range<T>infiniteOpen(T upper) Creates the left-unbounded, right-bounded and right-open range with provided upper bound.integerRange(String range) Creates theIntegerrange from provided string:booleanisEmpty()Determines whether this range is empty or not.booleanbooleanlocalDateRange(String range) Creates theLocalDaterange from provided string:static Range<LocalDateTime>localDateTimeRange(String range) Creates theLocalDateTimerange from provided string:Creates theLongrange from provided string:lower()Returns the lower bound of this range.static <T extends Comparable<? super T>>
Range<T>static <T extends Comparable<? super T>>
Range<T>open(T lower, T upper) Creates the open range with provided bounds.static <T extends Comparable<? super T>>
Range<T>openClosed(T lower, T upper) Creates the left-open, right-closed range with provided bounds.static <T extends Comparable<? super T>>
Range<T>openInfinite(T lower) Creates the left-bounded, left-open and right-unbounded range with provided lower bound.toString()upper()Returns the upper bound of this range.static Range<ZonedDateTime>zonedDateTimeRange(String rangeStr) Creates theZonedDateTimerange from provided string:
-
Field Details
-
LOWER_INCLUSIVE
public static final int LOWER_INCLUSIVE- See Also:
-
LOWER_EXCLUSIVE
public static final int LOWER_EXCLUSIVE- See Also:
-
UPPER_INCLUSIVE
public static final int UPPER_INCLUSIVE- See Also:
-
UPPER_EXCLUSIVE
public static final int UPPER_EXCLUSIVE- See Also:
-
LOWER_INFINITE
public static final int LOWER_INFINITE- See Also:
-
UPPER_INFINITE
public static final int UPPER_INFINITE- See Also:
-
EMPTY
- See Also:
-
INFINITY
- See Also:
-
-
Method Details
-
closed
Creates the closed range with provided bounds.The mathematical equivalent will be:
.[a, b] = {x | a <= x <= b}- Type Parameters:
T- The type of bounds.- Parameters:
lower- The lower bound, never null.upper- The upper bound, never null.- Returns:
- The closed range.
-
open
Creates the open range with provided bounds.The mathematical equivalent will be:
(a, b) = {x | a < x < b}- Type Parameters:
T- The type of bounds.- Parameters:
lower- The lower bound, never null.upper- The upper bound, never null.- Returns:
- The range.
-
openClosed
Creates the left-open, right-closed range with provided bounds.The mathematical equivalent will be:
(a, b] = {x | a < x <= b}- Type Parameters:
T- The type of bounds.- Parameters:
lower- The lower bound, never null.upper- The upper bound, never null.- Returns:
- The range.
-
closedOpen
Creates the left-closed, right-open range with provided bounds.The mathematical equivalent will be:
[a, b) = {x | a <= x < b}- Type Parameters:
T- The type of bounds.- Parameters:
lower- The lower bound, never null.upper- The upper bound, never null.- Returns:
- The range.
-
openInfinite
Creates the left-bounded, left-open and right-unbounded range with provided lower bound.The mathematical equivalent will be:
(a, +∞) = {x | x > a}- Type Parameters:
T- The type of bounds.- Parameters:
lower- The lower bound, never null.- Returns:
- The range.
-
closedInfinite
Creates the left-bounded, left-closed and right-unbounded range with provided lower bound.The mathematical equivalent will be:
[a, +∞) = {x | x >= a}- Type Parameters:
T- The type of bounds.- Parameters:
lower- The lower bound, never null.- Returns:
- The range.
-
infiniteOpen
Creates the left-unbounded, right-bounded and right-open range with provided upper bound.The mathematical equivalent will be:
(-∞, b) = {x | x < b}- Type Parameters:
T- The type of bounds.- Parameters:
upper- The upper bound, never null.- Returns:
- The range.
-
infiniteClosed
Creates the left-unbounded, right-bounded and right-closed range with provided upper bound.The mathematical equivalent will be:
(-∞, b] = {x | x =< b}- Type Parameters:
T- The type of bounds.- Parameters:
upper- The upper bound, never null.- Returns:
- The range.
-
infinite
Creates the unbounded at both ends range with provided upper bound.The mathematical equivalent will be:
(-∞, +∞) = ℝ- Type Parameters:
T- The type of bounds.- Parameters:
cls- The range class, never null.- Returns:
- The infinite range.
-
emptyRange
Creates the empty range. In other words the range that contains no points.The mathematical equivalent will be:
(a, a) = ∅- Type Parameters:
R- The type of bounds.- Parameters:
cls- The range class, never null.- Returns:
- The empty range.
-
ofString
-
bigDecimalRange
Creates theBigDecimalrange from provided string:Range<BigDecimal> closed = Range.bigDecimalRange("[0.1,1.1]"); Range<BigDecimal> halfOpen = Range.bigDecimalRange("(0.1,1.1]"); Range<BigDecimal> open = Range.bigDecimalRange("(0.1,1.1)"); Range<BigDecimal> leftUnbounded = Range.bigDecimalRange("(,1.1)");- Parameters:
range- The range string, for example "[5.5,7.8]".- Returns:
- The range of
BigDecimals. - Throws:
NumberFormatException- when one of the bounds are invalid.
-
integerRange
Creates theIntegerrange from provided string:Range<Integer> closed = Range.integerRange("[1,5]"); Range<Integer> halfOpen = Range.integerRange("(-1,1]"); Range<Integer> open = Range.integerRange("(1,2)"); Range<Integer> leftUnbounded = Range.integerRange("(,10)"); Range<Integer> unbounded = Range.integerRange("(,)");- Parameters:
range- The range string, for example "[5,7]".- Returns:
- The range of
Integers. - Throws:
NumberFormatException- when one of the bounds are invalid.
-
longRange
Creates theLongrange from provided string:Range<Long> closed = Range.longRange("[1,5]"); Range<Long> halfOpen = Range.longRange("(-1,1]"); Range<Long> open = Range.longRange("(1,2)"); Range<Long> leftUnbounded = Range.longRange("(,10)"); Range<Long> unbounded = Range.longRange("(,)");- Parameters:
range- The range string, for example "[5,7]".- Returns:
- The range of
Longs. - Throws:
NumberFormatException- when one of the bounds are invalid.
-
localDateTimeRange
Creates theLocalDateTimerange from provided string:Range<LocalDateTime> closed = Range.localDateTimeRange("[2014-04-28 16:00:49,2015-04-28 16:00:49]"); Range<LocalDateTime> quoted = Range.localDateTimeRange("[\"2014-04-28 16:00:49\",\"2015-04-28 16:00:49\"]"); Range<LocalDateTime> iso = Range.localDateTimeRange("[\"2014-04-28T16:00:49.2358\",\"2015-04-28T16:00:49\"]");The valid formats for bounds are:
- yyyy-MM-dd HH:mm:ss[.SSSSSS]
- yyyy-MM-dd'T'HH:mm:ss[.SSSSSS]
- Parameters:
range- The range string, for example "[2014-04-28 16:00:49,2015-04-28 16:00:49]".- Returns:
- The range of
LocalDateTimes. - Throws:
DateTimeParseException- when one of the bounds are invalid.
-
localDateRange
Creates theLocalDaterange from provided string:Range<LocalDate> closed = Range.localDateRange("[2014-04-28,2015-04-289]"); Range<LocalDate> quoted = Range.localDateRange("[\"2014-04-28\",\"2015-04-28\"]"); Range<LocalDate> iso = Range.localDateRange("[\"2014-04-28\",\"2015-04-28\"]");The valid formats for bounds are:
- yyyy-MM-dd
- yyyy-MM-dd
- Parameters:
range- The range string, for example "[2014-04-28,2015-04-28]".- Returns:
- The range of
LocalDates. - Throws:
DateTimeParseException- when one of the bounds are invalid.
-
zonedDateTimeRange
Creates theZonedDateTimerange from provided string:Range<ZonedDateTime> closed = Range.zonedDateTimeRange("[2007-12-03T10:15:30+01:00\",\"2008-12-03T10:15:30+01:00]"); Range<ZonedDateTime> quoted = Range.zonedDateTimeRange("[\"2007-12-03T10:15:30+01:00\",\"2008-12-03T10:15:30+01:00\"]"); Range<ZonedDateTime> iso = Range.zonedDateTimeRange("[2011-12-03T10:15:30+01:00[Europe/Paris], 2012-12-03T10:15:30+01:00[Europe/Paris]]");The valid formats for bounds are:
- yyyy-MM-dd HH:mm:ss[.SSSSSS]X
- yyyy-MM-dd'T'HH:mm:ss[.SSSSSS]X
- Parameters:
rangeStr- The range string, for example "[2011-12-03T10:15:30+01:00,2012-12-03T10:15:30+01:00]".- Returns:
- The range of
ZonedDateTimes. - Throws:
DateTimeParseException- when one of the bounds are invalid.IllegalArgumentException- when bounds time zones are different.
-
equals
-
hashCode
public int hashCode() -
toString
-
hasMask
public boolean hasMask(int flag) -
isLowerBoundClosed
public boolean isLowerBoundClosed() -
isUpperBoundClosed
public boolean isUpperBoundClosed() -
hasLowerBound
public boolean hasLowerBound() -
hasUpperBound
public boolean hasUpperBound() -
lower
Returns the lower bound of this range. Ifnullis returned then this range is left-unbounded.- Returns:
- The lower bound.
-
upper
Returns the upper bound of this range. Ifnullis returned then this range is right-unbounded.- Returns:
- The upper bound.
-
contains
Determines whether this range contains this point or not.For example:
assertTrue(integerRange("[1,2]").contains(1)) assertTrue(integerRange("[1,2]").contains(2)) assertTrue(integerRange("[-1,1]").contains(0)) assertTrue(infinity(Integer.class).contains(Integer.MAX_VALUE)) assertTrue(infinity(Integer.class).contains(Integer.MIN_VALUE)) assertFalse(integerRange("(1,2]").contains(1)) assertFalse(integerRange("(1,2]").contains(3)) assertFalse(integerRange("[-1,1]").contains(0))- Parameters:
point- The point to check.- Returns:
- Whether
pointin this range or not.
-
contains
Determines whether this range contains this range or not.For example:
assertTrue(integerRange("[-2,2]").contains(integerRange("[-1,1]"))) assertTrue(integerRange("(,)").contains(integerRange("(,)")) assertFalse(integerRange("[-2,2)").contains(integerRange("[-1,2]"))) assertFalse(integerRange("(-2,2]").contains(1))- Parameters:
range- The range to check.- Returns:
- Whether
rangein this range or not.
-
isEmpty
public boolean isEmpty()Determines whether this range is empty or not.For example:
assertFalse(integerRange("empty").contains(1))- Returns:
- Whether
rangein this range or not.
-
asString
-