Class DiscreteDomain<C extends java.lang.Comparable>


  • @GwtCompatible
    public abstract class DiscreteDomain<C extends java.lang.Comparable>
    extends java.lang.Object
    A descriptor for a discrete Comparable domain such as all Integer instances. A discrete domain is one that supports the three basic operations: next(C), previous(C) and distance(C, C), according to their specifications. The methods minValue() and maxValue() should also be overridden for bounded types.

    A discrete domain always represents the entire set of values of its type; it cannot represent partial domains such as "prime integers" or "strings of length 5."

    See the Guava User Guide section on DiscreteDomain.

    Since:
    10.0
    Author:
    Kevin Bourrillion
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected DiscreteDomain()
      Constructor for use by subclasses.
    • Method Summary

      All Methods Static Methods Instance Methods Abstract Methods Concrete Methods 
      Modifier and Type Method Description
      static DiscreteDomain<java.math.BigInteger> bigIntegers()
      Returns the discrete domain for values of type BigInteger.
      abstract long distance​(C start, C end)
      Returns a signed value indicating how many nested invocations of next(C) (if positive) or previous(C) (if negative) are needed to reach end starting from start.
      static DiscreteDomain<java.lang.Integer> integers()
      Returns the discrete domain for values of type Integer.
      static DiscreteDomain<java.lang.Long> longs()
      Returns the discrete domain for values of type Long.
      C maxValue()
      Returns the maximum value of type C, if it has one.
      C minValue()
      Returns the minimum value of type C, if it has one.
      abstract C next​(C value)
      Returns the unique least value of type C that is greater than value, or null if none exists.
      abstract C previous​(C value)
      Returns the unique greatest value of type C that is less than value, or null if none exists.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • DiscreteDomain

        protected DiscreteDomain()
        Constructor for use by subclasses.
    • Method Detail

      • integers

        public static DiscreteDomain<java.lang.Integer> integers()
        Returns the discrete domain for values of type Integer.

        This method always returns the same object. That object is serializable; deserializing it results in the same object too.

        Since:
        14.0 (since 10.0 as DiscreteDomains.integers())
      • longs

        public static DiscreteDomain<java.lang.Long> longs()
        Returns the discrete domain for values of type Long.

        This method always returns the same object. That object is serializable; deserializing it results in the same object too.

        Since:
        14.0 (since 10.0 as DiscreteDomains.longs())
      • bigIntegers

        public static DiscreteDomain<java.math.BigInteger> bigIntegers()
        Returns the discrete domain for values of type BigInteger.

        This method always returns the same object. That object is serializable; deserializing it results in the same object too.

        Since:
        15.0
      • next

        @CheckForNull
        public abstract C next​(C value)
        Returns the unique least value of type C that is greater than value, or null if none exists. Inverse operation to previous(C).
        Parameters:
        value - any value of type C
        Returns:
        the least value greater than value, or null if value is maxValue()
      • previous

        @CheckForNull
        public abstract C previous​(C value)
        Returns the unique greatest value of type C that is less than value, or null if none exists. Inverse operation to next(C).
        Parameters:
        value - any value of type C
        Returns:
        the greatest value less than value, or null if value is minValue()
      • distance

        public abstract long distance​(C start,
                                      C end)
        Returns a signed value indicating how many nested invocations of next(C) (if positive) or previous(C) (if negative) are needed to reach end starting from start. For example, if end = next(next(next(start))), then distance(start, end) == 3 and distance(end, start) == -3. As well, distance(a, a) is always zero.

        Note that this function is necessarily well-defined for any discrete type.

        Returns:
        the distance as described above, or Long.MIN_VALUE or Long.MAX_VALUE if the distance is too small or too large, respectively.
      • minValue

        @CanIgnoreReturnValue
        public C minValue()
        Returns the minimum value of type C, if it has one. The minimum value is the unique value for which Comparable.compareTo(Object) never returns a positive value for any input of type C.

        The default implementation throws NoSuchElementException.

        Returns:
        the minimum value of type C; never null
        Throws:
        java.util.NoSuchElementException - if the type has no (practical) minimum value; for example, BigInteger
      • maxValue

        @CanIgnoreReturnValue
        public C maxValue()
        Returns the maximum value of type C, if it has one. The maximum value is the unique value for which Comparable.compareTo(Object) never returns a negative value for any input of type C.

        The default implementation throws NoSuchElementException.

        Returns:
        the maximum value of type C; never null
        Throws:
        java.util.NoSuchElementException - if the type has no (practical) maximum value; for example, BigInteger