Package org.optaplanner.core.api.domain.valuerange

## Interface ValueRange<T>

- All Known Subinterfaces:
    `CountableValueRange<T>`
  All Known Implementing Classes:
    `AbstractCountableValueRange`, `AbstractUncountableValueRange`, `BigDecimalValueRange`, `BigIntegerValueRange`, `BooleanValueRange`, `CompositeCountableValueRange`, `DoubleValueRange`, `EmptyValueRange`, `IntValueRange`, `ListValueRange`, `LongValueRange`, `NullableCountableValueRange`, `TemporalValueRange`

      public interface ValueRange<T>

  A ValueRange is a set of a values for a `PlanningVariable`. These values might be stored in memory as a `Collection` (usually a `List` or `Set`), but if the values are numbers, they can also be stored in memory by their bounds to use less memory and provide more opportunities.

  Prefer using `CountableValueRange` (which extends this interface) whenever possible.

  A ValueRange is stateful (unlike a `ValueSelector` which is stateless).

  Implementations must be immutable.

  An implementation must extend `AbstractCountableValueRange` or `AbstractUncountableValueRange` to ensure backwards compatibility in future versions.

  See Also:
    `ValueRangeFactory`, `CountableValueRange`, `AbstractCountableValueRange`, `AbstractUncountableValueRange`

- - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `contains​(T value)` |
    `Iterator<T>` | `createRandomIterator​(Random workingRandom)` | Select in random order, but without shuffling the elements.
    `boolean` | `isEmpty()` | In a `CountableValueRange`, this must be consistent with `CountableValueRange.getSize()`.

- - ### Method Detail

    - #### isEmpty

          boolean isEmpty()

      In a `CountableValueRange`, this must be consistent with `CountableValueRange.getSize()`.
      Returns:
        true if the range is empty

    - #### contains

          boolean contains​(T value)

      Parameters:
        `value` - sometimes null
      Returns:
        true if the ValueRange contains that value

    - #### createRandomIterator

          Iterator<T> createRandomIterator​(Random workingRandom)

      Select in random order, but without shuffling the elements. Each element might be selected multiple times. Scales well because it does not require caching.
      Parameters:
        `workingRandom` - never null, the `Random` to use when any random number is needed, so `EnvironmentMode.REPRODUCIBLE` works correctly. `RandomUtils` can be useful too.
      Returns:
        never null