Package: groovy.lang

## [Java] Class NumberRange

- groovy.lang.NumberRange

- All Implemented Interfaces and Traits:
    Range, Serializable

      public class NumberRange
      extends AbstractList
      implements Range, Serializable

  Represents an immutable list of Numbers from a value to a value with a particular step size. In general, it isn't recommended using a NumberRange as a key to a map. The range 0..3 is deemed to be equal to 0.0..3.0 but they have different hashCode values, so storing a value using one of these ranges couldn't be retrieved using the other.

  Since:
    2.5.0

- - ### Constructor Summary

    Constructors
    Constructor and description
    `NumberRange(T from, U to)` Creates an inclusive NumberRange with step size 1.
    `NumberRange(T from, U to, boolean inclusive)` Creates a new NumberRange with step size 1.
    `NumberRange(T from, U to, V stepSize)` Creates an inclusive NumberRange.
    `NumberRange(T from, U to, V stepSize, boolean inclusive)` Creates a NumberRange.
    `NumberRange(T from, U to, boolean inclusiveLeft, boolean inclusiveRight)` Creates a NumberRange.
    `NumberRange(T from, U to, V stepSize, boolean inclusiveLeft, boolean inclusiveRight)` Creates a NumberRange.

  - ### Methods Summary

    Methods
    Type Params | Return Type | Name and description
    --- | --- | ---
    `<T extends Number & Comparable>` | `public NumberRange` | `by(T stepSize)` For a NumberRange with step size 1, creates a new NumberRange with the same `from` and `to` as this NumberRange but with a step size of `stepSize`.
    `` | `public boolean` | `contains(Object value)` iterates over all values and returns true if one value matches.
    `` | `public boolean` | `containsWithinBounds(Object value)` Checks whether a value is between the from and to values of a Range
    `` | `public boolean` | `equals(Object that)` An object is deemed equal to this NumberRange if it represents a List of items and those items equal the list of discrete items represented by this NumberRange.
    `` | `public boolean` | `fastEquals(NumberRange that)` Compares a NumberRange to another NumberRange using only a strict comparison of the NumberRange properties.
    `` | `public Comparable` | `get(int index)` Returns the element at the specified position in this list. throws: IndexOutOfBoundsException if the index is out of range (`index < 0 || index >= size()`) throws: IndexOutOfBoundsException Returns the element at the specified position in this list. throws: IndexOutOfBoundsException if the index is out of range (`index < 0 || index >= size()`) Parameters: `index` - index of the element to return `index` - index of the element to return Returns: the element at the specified position in this list the element at the specified position in this list
    `` | `public Comparable` | `getFrom()` * The lower value in the range. * * Returns: the lower value in the range.
    `` | `public Comparable` | `getStepSize()` Returns the increment used when traversing this range.
    `` | `public Comparable` | `getTo()` * The upper value in the range. * * Returns: the upper value in the range
    `` | `public int` | `hashCode()` A NumberRange's hashCode is based on hashCode values of the discrete items it represents.
    `` | `public String` | `inspect()` * Returns: the verbose String representation of this Range as would be typed into a console to create the Range instance
    `` | `public boolean` | `isReverse()` * Indicates whether this is a reverse range which iterates backwards * starting from the to value and ending on the from value * * Returns: `true` if this is a reverse range
    `` | `public Iterator<Comparable>` | `iterator()` Returns an iterator over the elements in this list in proper sequence. Implementation Requirements: This implementation returns a straightforward implementation of the iterator interface, relying on the backing list's `size()`, `get(int)`, and `remove(int)` methods. Note that the iterator returned by this method will throw an UnsupportedOperationException in response to its `remove` method unless the list's `remove(int)` method is overridden. This implementation can be made to throw runtime exceptions in the face of concurrent modification, as described in the specification for the (protected) modCount field. Returns: an iterator over the elements in this list in proper sequence
    `` | `public int` | `size()`
    `` | `public void` | `step(int numSteps, Closure closure)` * Steps through the range, calling a closure for each item. * * Parameters: `step` - the amount by which to step. If negative, steps through the range backwards. * `closure` - the Closure to call
    `` | `public List<Comparable>` | `step(int numSteps)` * Forms a list by stepping through the range by the indicated interval. * * Parameters: `step` - the amount by which to step. If negative, steps through the range backwards. * Returns: the list formed by stepping through the range by the indicated interval.
    `` | `public List<Comparable>` | `subList(int fromIndex, int toIndex)` Returns a view of the portion of this list between the specified `fromIndex`, inclusive, and `toIndex`, exclusive. (If `fromIndex` and `toIndex` are equal, the returned list is empty.) The returned list is backed by this list, so non-structural changes in the returned list are reflected in this list, and vice-versa. The returned list supports all of the optional list operations supported by this list. This method eliminates the need for explicit range operations (of the sort that commonly exist for arrays). Any operation that expects a list can be used as a range operation by passing a subList view instead of a whole list. For example, the following idiom removes a range of elements from a list:
        list.subList(from, to).clear();
    Similar idioms may be constructed for `indexOf` and `lastIndexOf`, and all of the algorithms in the `Collections` class can be applied to a subList. The semantics of the list returned by this method become undefined if the backing list (i.e., this list) is structurally modified in any way other than via the returned list. (Structural modifications are those that change the size of this list, or otherwise perturb it in such a fashion that iterations in progress may yield incorrect results.) throws: IndexOutOfBoundsException for an illegal endpoint index value (`fromIndex < 0 || toIndex > size || fromIndex > toIndex`) throws: IndexOutOfBoundsException if an endpoint index value is out of range `(fromIndex < 0 || toIndex > size)` throws: IllegalArgumentException if the endpoint indices are out of order `(fromIndex > toIndex)` Parameters: `fromIndex` - low endpoint (inclusive) of the subList `toIndex` - high endpoint (exclusive) of the subList Returns: a view of the specified range within this list Implementation Requirements: This implementation returns a list that subclasses `AbstractList`. The subclass stores, in private fields, the size of the subList (which can change over its lifetime), and the expected `modCount` value of the backing list. There are two variants of the subclass, one of which implements `RandomAccess`. If this list implements `RandomAccess` the returned list will be an instance of the subclass that implements `RandomAccess`. The subclass's `set(int, E)`, `get(int)`, `add(int, E)`, `remove(int)`, `addAll(int, Collection)` and `removeRange(int, int)` methods all delegate to the corresponding methods on the backing abstract list, after bounds-checking the index and adjusting for the offset. The `addAll(Collection c)` method merely returns `addAll(size, c)`. The `listIterator(int)` method returns a "wrapper object" over a list iterator on the backing list, which is created with the corresponding method on the backing list. The `iterator` method merely returns `listIterator()`, and the `size` method merely returns the subclass's `size` field. All methods first check to see if the actual `modCount` of the backing list is equal to its expected value, and throw a `ConcurrentModificationException` if it is not.
    `` | `public RangeInfo` | `subListBorders(int size)` A method for determining from and to information when using this IntRange to index an aggregate object of the specified size.
    `` | `public String` | `toString()` Returns a string representation of this collection. The string representation consists of a list of the collection's elements in the order they are returned by its iterator, enclosed in square brackets (`"[]"`). Adjacent elements are separated by the characters `", "` (comma and space). Elements are converted to strings as by String.valueOf. Returns: a string representation of this collection

  - ### Inherited Methods Summary

    Inherited Methods
    Methods inherited from class | Name
    --- | ---
    `class AbstractList` | `add, add, addAll, addAll, clear, contains, containsAll, equals, forEach, get, getClass, hashCode, indexOf, isEmpty, iterator, lastIndexOf, listIterator, listIterator, notify, notifyAll, parallelStream, remove, remove, removeAll, removeIf, replaceAll, retainAll, set, size, sort, spliterator, stream, subList, toArray, toArray, toArray, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### public NumberRange(T from, U to)

      Creates an inclusive NumberRange with step size 1. Creates a reversed range if `from` < `to`.

      Parameters:
        `from` - the first value in the range
        `to` - the last value in the range

    - #### public NumberRange(T from, U to, boolean inclusive)

      Creates a new NumberRange with step size 1. Creates a reversed range if `from` < `to`.

      Parameters:
        `from` - start of the range
        `to` - end of the range
        `inclusive` - whether the range is inclusive

    - #### public NumberRange(T from, U to, V stepSize)

      Creates an inclusive NumberRange. Creates a reversed range if `from` < `to`.

      Parameters:
        `from` - start of the range
        `to` - end of the range
        `stepSize` - the gap between discrete elements in the range

    - #### public NumberRange(T from, U to, V stepSize, boolean inclusive)

      Creates a NumberRange. Creates a reversed range if `from` < `to`.

      Parameters:
        `from` - start of the range
        `to` - end of the range
        `stepSize` - the gap between discrete elements in the range
        `inclusive` - whether the range is inclusive (upper bound)

    - #### public NumberRange(T from, U to, boolean inclusiveLeft, boolean inclusiveRight)

      Creates a NumberRange. Creates a reversed range if `from` < `to`.

      Parameters:
        `from` - start of the range
        `to` - end of the range
        `inclusiveLeft` - whether the range is includes the lower bound
        `inclusiveRight` - whether the range is includes the upper bound

    - #### public NumberRange(T from, U to, V stepSize, boolean inclusiveLeft, boolean inclusiveRight)

      Creates a NumberRange. Creates a reversed range if `from` < `to`.

      Parameters:
        `from` - start of the range
        `to` - end of the range
        `stepSize` - the gap between discrete elements in the range
        `inclusiveLeft` - whether the range is includes the lower bound
        `inclusiveRight` - whether the range is includes the upper bound

  - ### Method Detail

    - #### <T extends Number & Comparable> public NumberRange by(T stepSize)

      For a NumberRange with step size 1, creates a new NumberRange with the same `from` and `to` as this NumberRange but with a step size of `stepSize`.

      Parameters:
        `stepSize` - the desired step size
      Returns:
        a new NumberRange

    - #### public boolean contains(Object value)

      iterates over all values and returns true if one value matches. Also see containsWithinBounds.

    - #### public boolean containsWithinBounds(Object value)

      Checks whether a value is between the from and to values of a Range

      Parameters:
        `value` - the value of interest
      Returns:
        true if the value is within the bounds

    - #### public boolean equals(Object that)

      An object is deemed equal to this NumberRange if it represents a List of items and those items equal the list of discrete items represented by this NumberRange.

      Parameters:
        `that` - the object to be compared for equality with this NumberRange
      Returns:
        `true` if the specified object is equal to this NumberRange
      See Also:
        fastEquals(NumberRange)

    - #### public boolean fastEquals(NumberRange that)

      Compares a NumberRange to another NumberRange using only a strict comparison of the NumberRange properties. This won't return true for some ranges which represent the same discrete items, use equals instead for that but will be much faster for large lists.

      Parameters:
        `that` - the NumberRange to check equality with
      Returns:
        `true` if the ranges are equal

    - #### public Comparable get(int index)

      Returns the element at the specified position in this list.

      throws:
        IndexOutOfBoundsException if the index is out of range (`index < 0 || index >= size()`)
      throws:
        IndexOutOfBoundsException Returns the element at the specified position in this list.
      throws:
        IndexOutOfBoundsException if the index is out of range (`index < 0 || index >= size()`)
      Parameters:
        `index` - index of the element to return
        `index` - index of the element to return
      Returns:
        the element at the specified position in this list
        the element at the specified position in this list

    - #### public Comparable getFrom()

      * The lower value in the range. * *

      Returns:
        the lower value in the range.

    - #### public Comparable getStepSize()

      Returns the increment used when traversing this range.

      Returns:
        the step size between successive values

    - #### public Comparable getTo()

      * The upper value in the range. * *

      Returns:
        the upper value in the range

    - #### public int hashCode()

      A NumberRange's hashCode is based on hashCode values of the discrete items it represents.

      Returns:
        the hashCode value

    - #### public String inspect()

      *

      Returns:
        the verbose String representation of this Range as would be typed into a console to create the Range instance

    - #### public boolean isReverse()

      * Indicates whether this is a reverse range which iterates backwards * starting from the to value and ending on the from value * *

      Returns:
        `true` if this is a reverse range

    - #### public Iterator<Comparable> iterator()

      Returns an iterator over the elements in this list in proper sequence.

      Implementation Requirements:
        This implementation returns a straightforward implementation of the iterator interface, relying on the backing list's `size()`, `get(int)`, and `remove(int)` methods.

        Note that the iterator returned by this method will throw an UnsupportedOperationException in response to its `remove` method unless the list's `remove(int)` method is overridden.

        This implementation can be made to throw runtime exceptions in the face of concurrent modification, as described in the specification for the (protected) modCount field.

      Returns:
        an iterator over the elements in this list in proper sequence

    - #### public int size()

    - #### public void step(int numSteps, Closure closure)

      * Steps through the range, calling a closure for each item. * *

      Parameters:
        `step` - the amount by which to step. If negative, steps through the range backwards. *
        `closure` - the Closure to call

    - #### public List<Comparable> step(int numSteps)

      * Forms a list by stepping through the range by the indicated interval. * *

      Parameters:
        `step` - the amount by which to step. If negative, steps through the range backwards. *
      Returns:
        the list formed by stepping through the range by the indicated interval.

    - #### public List<Comparable> subList(int fromIndex, int toIndex)

      Returns a view of the portion of this list between the specified `fromIndex`, inclusive, and `toIndex`, exclusive. (If `fromIndex` and `toIndex` are equal, the returned list is empty.) The returned list is backed by this list, so non-structural changes in the returned list are reflected in this list, and vice-versa. The returned list supports all of the optional list operations supported by this list.

      This method eliminates the need for explicit range operations (of the sort that commonly exist for arrays). Any operation that expects a list can be used as a range operation by passing a subList view instead of a whole list. For example, the following idiom removes a range of elements from a list:

          list.subList(from, to).clear();

      Similar idioms may be constructed for `indexOf` and `lastIndexOf`, and all of the algorithms in the `Collections` class can be applied to a subList.

      The semantics of the list returned by this method become undefined if the backing list (i.e., this list) is structurally modified in any way other than via the returned list. (Structural modifications are those that change the size of this list, or otherwise perturb it in such a fashion that iterations in progress may yield incorrect results.)

      throws:
        IndexOutOfBoundsException for an illegal endpoint index value (`fromIndex < 0 || toIndex > size || fromIndex > toIndex`)
      throws:
        IndexOutOfBoundsException if an endpoint index value is out of range `(fromIndex < 0 || toIndex > size)`
      throws:
        IllegalArgumentException if the endpoint indices are out of order `(fromIndex > toIndex)`
      Parameters:
        `fromIndex` - low endpoint (inclusive) of the subList
        `toIndex` - high endpoint (exclusive) of the subList
      Returns:
        a view of the specified range within this list
      Implementation Requirements:
        This implementation returns a list that subclasses `AbstractList`. The subclass stores, in private fields, the size of the subList (which can change over its lifetime), and the expected `modCount` value of the backing list. There are two variants of the subclass, one of which implements `RandomAccess`. If this list implements `RandomAccess` the returned list will be an instance of the subclass that implements `RandomAccess`.

        The subclass's `set(int, E)`, `get(int)`, `add(int, E)`, `remove(int)`, `addAll(int, Collection)` and `removeRange(int, int)` methods all delegate to the corresponding methods on the backing abstract list, after bounds-checking the index and adjusting for the offset. The `addAll(Collection c)` method merely returns `addAll(size, c)`.

        The `listIterator(int)` method returns a "wrapper object" over a list iterator on the backing list, which is created with the corresponding method on the backing list. The `iterator` method merely returns `listIterator()`, and the `size` method merely returns the subclass's `size` field.

        All methods first check to see if the actual `modCount` of the backing list is equal to its expected value, and throw a `ConcurrentModificationException` if it is not.

    - #### public RangeInfo subListBorders(int size)

      A method for determining from and to information when using this IntRange to index an aggregate object of the specified size. Normally only used internally within Groovy but useful if adding range indexing support for your own aggregates.

      Parameters:
        `size` - the size of the aggregate being indexed
      Returns:
        the calculated range information (with 1 added to the to value, ready for providing to subList

    - #### public String toString()

      Returns a string representation of this collection. The string representation consists of a list of the collection's elements in the order they are returned by its iterator, enclosed in square brackets (`"[]"`). Adjacent elements are separated by the characters `", "` (comma and space). Elements are converted to strings as by String.valueOf.

      Returns:
        a string representation of this collection