Class Interval

  • All Implemented Interfaces:
    java.io.Serializable, java.lang.Iterable<java.lang.Integer>, java.util.Collection<java.lang.Integer>, java.util.List<java.lang.Integer>, java.util.RandomAccess, InternalIterable<java.lang.Integer>, LazyIterable<java.lang.Integer>, RichIterable<java.lang.Integer>

    public final class Interval
    extends AbstractLazyIterable<java.lang.Integer>
    implements java.util.List<java.lang.Integer>, java.io.Serializable, java.util.RandomAccess
    An Interval is a range of integers that may be iterated over using a step value. Interval is an OO implementation of a for-loop.
    See Also:
    Serialized Form
    • Field Detail

      • from

        private final int from
      • to

        private final int to
      • step

        private final int step
      • size

        private transient int size
    • Constructor Detail

      • Interval

        private Interval​(int from,
                         int to,
                         int step)
    • Method Detail

      • from

        public static Interval from​(int newFrom)
        This static from method allows Interval to act as a fluent builder for itself. It works in conjunction with the instance methods to(int) and by(int).

        Usage Example:

         Interval interval1 = Interval.from(1).to(5);         // results in: 1, 2, 3, 4, 5.
         Interval interval2 = Interval.from(1).to(10).by(2);  // results in: 1, 3, 5, 7, 9.
         
      • to

        public Interval to​(int newTo)
        This instance to method allows Interval to act as a fluent builder for itself. It works in conjunction with the static method from(int) and instance method by(int).

        Usage Example:

         Interval interval1 = Interval.from(1).to(5);         // results in: 1, 2, 3, 4, 5.
         Interval interval2 = Interval.from(1).to(10).by(2);  // results in: 1, 3, 5, 7, 9.
         
      • by

        public Interval by​(int newStep)
        This instance by method allows Interval to act as a fluent builder for itself. It works in conjunction with the static method from(int) and instance method to(int).

        Usage Example:

         Interval interval1 = Interval.from(1).to(5);         // results in: 1, 2, 3, 4, 5.
         Interval interval2 = Interval.from(1).to(10).by(2);  // results in: 1, 3, 5, 7, 9.
         
      • zero

        public static Interval zero()
        Returns an Interval starting at zero.

        Usage Example:

         Interval interval1 = Interval.zero().to(5);         // results in: 0, 1, 2, 3, 4, 5.
         Interval interval2 = Interval.zero().to(10).by(2);  // results in: 0, 2, 4, 6, 8, 10.
         
      • oneTo

        public static Interval oneTo​(int count)
        Returns an Interval starting from 1 to the specified count value with a step value of 1.
      • oneToBy

        public static Interval oneToBy​(int count,
                                       int step)
        Returns an Interval starting from 1 to the specified count value with a step value of step.
      • zeroTo

        public static Interval zeroTo​(int count)
        Returns an Interval starting from 0 to the specified count value with a step value of 1.
      • zeroToBy

        public static Interval zeroToBy​(int count,
                                        int step)
        Returns an Interval starting from 0 to the specified count value with a step value of step.
      • fromTo

        public static Interval fromTo​(int from,
                                      int to)
        Returns an Interval starting from the value from to the specified value to with a step value of 1.
      • fromToExclusive

        public static Interval fromToExclusive​(int from,
                                               int to)
        Returns an Interval starting from the value from until the specified value to (exclusive) with a step value of 1
      • evensFromTo

        public static Interval evensFromTo​(int from,
                                           int to)
        Returns an Interval representing the even values from the value from to the value to.
      • oddsFromTo

        public static Interval oddsFromTo​(int from,
                                          int to)
        Returns an Interval representing the odd values from the value from to the value to.
      • toSet

        public static MutableSet<java.lang.Integer> toSet​(int from,
                                                          int to)
        Returns a Set representing the Integer values from the value from to the value to.
      • toReverseList

        public static MutableList<java.lang.Integer> toReverseList​(int from,
                                                                   int to)
        Returns a MutableList representing the Integer values from the value from to the value to in reverse.
      • toArray

        public static java.lang.Integer[] toArray​(int from,
                                                  int to)
        Returns an Integer array with the values inclusively between from and to.
      • toReverseArray

        public static java.lang.Integer[] toReverseArray​(int from,
                                                         int to)
      • fromToBy

        public static Interval fromToBy​(int from,
                                        int to,
                                        int stepBy)
        Returns an Interval for the range of integers inclusively between from and to with the specified stepBy value.
      • containsAll

        public boolean containsAll​(int... values)
        Returns true if the Interval contains all the specified int values.
      • containsNone

        public boolean containsNone​(int... values)
        Returns true if the Interval contains none of the specified int values.
      • contains

        public boolean contains​(java.lang.Object object)
        Description copied from interface: RichIterable
        Returns true if the iterable has an element which responds true to element.equals(object).
        Specified by:
        contains in interface java.util.Collection<java.lang.Integer>
        Specified by:
        contains in interface java.util.List<java.lang.Integer>
        Specified by:
        contains in interface RichIterable<java.lang.Integer>
        Overrides:
        contains in class AbstractRichIterable<java.lang.Integer>
      • contains

        public boolean contains​(int value)
        Returns true if the Interval contains the specified int value.
      • factorial

        public java.lang.Number factorial()
        Returns the Number result of calculating factorial for the range.
      • product

        public java.lang.Number product()
        Returns the Number result of calculating product for the range.
      • bigIntegerProduct

        private java.math.BigInteger bigIntegerProduct()
        Returns the BigInteger result of calculating product for the range.
      • failIfOutOfFactorialRange

        private void failIfOutOfFactorialRange()
      • forEachWithIndex

        public void forEachWithIndex​(IntIntProcedure procedure)
      • forEachWithIndex

        public void forEachWithIndex​(ObjectIntProcedure<? super java.lang.Integer> objectIntProcedure)
        Description copied from interface: InternalIterable
        Iterates over the iterable passing each element and the current relative int index to the specified instance of ObjectIntProcedure.

        Example using a Java 8 lambda:

         people.forEachWithIndex((Person person, int index) -> LOGGER.info("Index: " + index + " person: " + person.getName()));
         

        Example using an anonymous inner class:

         people.forEachWithIndex(new ObjectIntProcedure<Person>()
         {
             public void value(Person person, int index)
             {
                 LOGGER.info("Index: " + index + " person: " + person.getName());
             }
         });
         
        Specified by:
        forEachWithIndex in interface InternalIterable<java.lang.Integer>
        Overrides:
        forEachWithIndex in class AbstractRichIterable<java.lang.Integer>
      • forEachWith

        public <P> void forEachWith​(IntObjectProcedure<? super P> procedure,
                                    P parameter)
      • goForward

        private boolean goForward()
      • forEachWith

        public <P> void forEachWith​(Procedure2<? super java.lang.Integer,​? super P> procedure,
                                    P parameter)
        Description copied from interface: InternalIterable
        The procedure2 is evaluated for each element in the iterable with the specified parameter provided as the second argument.

        Example using a Java 8 lambda:

         people.forEachWith((Person person, Person other) ->
             {
                 if (person.isRelatedTo(other))
                 {
                      LOGGER.info(person.getName());
                 }
             }, fred);
         

        Example using an anonymous inner class:

         people.forEachWith(new Procedure2<Person, Person>()
         {
             public void value(Person person, Person other)
             {
                 if (person.isRelatedTo(other))
                 {
                      LOGGER.info(person.getName());
                 }
             }
         }, fred);
         
        Specified by:
        forEachWith in interface InternalIterable<java.lang.Integer>
        Overrides:
        forEachWith in class AbstractRichIterable<java.lang.Integer>
      • each

        public void each​(Procedure<? super java.lang.Integer> procedure)
        Description copied from interface: RichIterable
        The procedure is executed for each element in the iterable.

        Example using a Java 8 lambda expression:

         people.each(person -> LOGGER.info(person.getName()));
         

        Example using an anonymous inner class:

         people.each(new Procedure<Person>()
         {
             public void value(Person person)
             {
                 LOGGER.info(person.getName());
             }
         });
         
        This method is a variant of InternalIterable.forEach(Procedure) that has a signature conflict with Iterable.forEach(java.util.function.Consumer).
        Specified by:
        each in interface RichIterable<java.lang.Integer>
        See Also:
        InternalIterable.forEach(Procedure), Iterable.forEach(java.util.function.Consumer)
      • forEach

        public void forEach​(Procedure<? super java.lang.Integer> procedure,
                            java.util.concurrent.Executor executor)
        This method executes a void procedure against an executor, passing the current index of the interval.
      • executeAndCountdown

        private void executeAndCountdown​(Procedure<? super java.lang.Integer> procedure,
                                         java.util.concurrent.Executor executor,
                                         java.util.concurrent.CountDownLatch latch,
                                         java.lang.Integer integer)
      • run

        public void run​(java.lang.Runnable runnable)
        This method runs a runnable a specified number of times against on the current thread.
      • run

        public void run​(java.lang.Runnable runnable,
                        java.util.concurrent.Executor executor)
        This method runs a runnable a specified number of times against an executor. The method is effectively asynchronous because it does not wait for all the runnables to finish.
      • injectInto

        public <R> R injectInto​(R injectValue,
                                Function2<? super R,​? super java.lang.Integer,​? extends R> function)
        Description copied from interface: RichIterable
        Returns the final result of evaluating function using each element of the iterable and the previous evaluation result as the parameters. The injected value is used for the first parameter of the first evaluation, and the current item in the iterable is used as the second parameter. This method is commonly called fold or sometimes reduce.
        Specified by:
        injectInto in interface RichIterable<java.lang.Integer>
        Overrides:
        injectInto in class AbstractRichIterable<java.lang.Integer>
      • injectInto

        public int injectInto​(int injectedValue,
                              IntObjectToIntFunction<? super java.lang.Integer> function)
        Description copied from interface: RichIterable
        Returns the final int result of evaluating function using each element of the iterable and the previous evaluation result as the parameters. The injected value is used for the first parameter of the first evaluation, and the current item in the iterable is used as the second parameter.
        Specified by:
        injectInto in interface RichIterable<java.lang.Integer>
        Overrides:
        injectInto in class AbstractRichIterable<java.lang.Integer>
      • injectInto

        public long injectInto​(long injectedValue,
                               LongObjectToLongFunction<? super java.lang.Integer> function)
        Description copied from interface: RichIterable
        Returns the final long result of evaluating function using each element of the iterable and the previous evaluation result as the parameters. The injected value is used for the first parameter of the first evaluation, and the current item in the iterable is used as the second parameter.
        Specified by:
        injectInto in interface RichIterable<java.lang.Integer>
        Overrides:
        injectInto in class AbstractRichIterable<java.lang.Integer>
      • injectInto

        public double injectInto​(double injectedValue,
                                 DoubleObjectToDoubleFunction<? super java.lang.Integer> function)
        Description copied from interface: RichIterable
        Returns the final double result of evaluating function using each element of the iterable and the previous evaluation result as the parameters. The injected value is used for the first parameter of the first evaluation, and the current item in the iterable is used as the second parameter.
        Specified by:
        injectInto in interface RichIterable<java.lang.Integer>
        Overrides:
        injectInto in class AbstractRichIterable<java.lang.Integer>
      • reverseForEach

        public void reverseForEach​(Procedure<? super java.lang.Integer> procedure)
      • reverseInjectInto

        public <R> R reverseInjectInto​(R injectValue,
                                       Function2<? super R,​java.lang.Integer,​? extends R> function)
      • addAllTo

        public <R extends java.util.Collection<java.lang.Integer>> R addAllTo​(R targetCollection)
      • collect

        public <T,​R extends java.util.Collection<T>> R collect​(Function<? super java.lang.Integer,​? extends T> function,
                                                                     R target)
        Description copied from interface: RichIterable
        Same as RichIterable.collect(Function), except that the results are gathered into the specified target collection.

        Example using a Java 8 lambda expression:

         MutableList<String> names =
             people.collect(person -> person.getFirstName() + " " + person.getLastName(), Lists.mutable.empty());
         

        Example using an anonymous inner class:

         MutableList<String> names =
             people.collect(new Function<Person, String>()
             {
                 public String valueOf(Person person)
                 {
                     return person.getFirstName() + " " + person.getLastName();
                 }
             }, Lists.mutable.empty());
         
        Specified by:
        collect in interface RichIterable<java.lang.Integer>
        Overrides:
        collect in class AbstractRichIterable<java.lang.Integer>
        Parameters:
        function - a Function to use as the collect transformation function
        target - the Collection to append to for all elements in this RichIterable that meet select criteria function
        Returns:
        target, which contains appended elements as a result of the collect transformation
        See Also:
        RichIterable.collect(Function)
      • select

        public <R extends java.util.Collection<java.lang.Integer>> R select​(Predicate<? super java.lang.Integer> predicate,
                                                                            R target)
        Description copied from interface: RichIterable
        Same as the select method with one parameter but uses the specified target collection for the results.

        Example using a Java 8 lambda expression:

         MutableList<Person> selected =
             people.select(person -> person.person.getLastName().equals("Smith"), Lists.mutable.empty());
         

        Example using an anonymous inner class:

         MutableList<Person> selected =
             people.select(new Predicate<Person>()
             {
                 public boolean accept(Person person)
                 {
                     return person.person.getLastName().equals("Smith");
                 }
             }, Lists.mutable.empty());
         

        Specified by:
        select in interface RichIterable<java.lang.Integer>
        Overrides:
        select in class AbstractRichIterable<java.lang.Integer>
        Parameters:
        predicate - a Predicate to use as the select criteria
        target - the Collection to append to for all elements in this RichIterable that meet select criteria predicate
        Returns:
        target, which contains appended elements as a result of the select criteria
        See Also:
        RichIterable.select(Predicate)
      • reject

        public <R extends java.util.Collection<java.lang.Integer>> R reject​(Predicate<? super java.lang.Integer> predicate,
                                                                            R target)
        Description copied from interface: RichIterable
        Same as the reject method with one parameter but uses the specified target collection for the results.

        Example using a Java 8 lambda expression:

         MutableList<Person> rejected =
             people.reject(person -> person.person.getLastName().equals("Smith"), Lists.mutable.empty());
         

        Example using an anonymous inner class:

         MutableList<Person> rejected =
             people.reject(new Predicate<Person>()
             {
                 public boolean accept(Person person)
                 {
                     return person.person.getLastName().equals("Smith");
                 }
             }, Lists.mutable.empty());
         
        Specified by:
        reject in interface RichIterable<java.lang.Integer>
        Overrides:
        reject in class AbstractRichIterable<java.lang.Integer>
        Parameters:
        predicate - a Predicate to use as the reject criteria
        target - the Collection to append to for all elements in this RichIterable that cause Predicate#accept(Object) method to evaluate to false
        Returns:
        target, which contains appended elements as a result of the reject criteria
      • equals

        public boolean equals​(java.lang.Object otherList)
        Specified by:
        equals in interface java.util.Collection<java.lang.Integer>
        Specified by:
        equals in interface java.util.List<java.lang.Integer>
        Overrides:
        equals in class java.lang.Object
      • intObjectNotEqual

        private boolean intObjectNotEqual​(int i,
                                          java.lang.Object object)
      • hashCode

        public int hashCode()
        Specified by:
        hashCode in interface java.util.Collection<java.lang.Integer>
        Specified by:
        hashCode in interface java.util.List<java.lang.Integer>
        Overrides:
        hashCode in class java.lang.Object
      • reverseThis

        public Interval reverseThis()
        Returns a new interval with the from and to values reversed and the step value negated.
      • size

        public int size()
        Returns the size of the interval.
        Specified by:
        size in interface java.util.Collection<java.lang.Integer>
        Specified by:
        size in interface java.util.List<java.lang.Integer>
        Specified by:
        size in interface RichIterable<java.lang.Integer>
        Overrides:
        size in class AbstractLazyIterable<java.lang.Integer>
      • toArray

        public java.lang.Integer[] toArray()
        Description copied from interface: RichIterable
        Converts this iterable to an array.
        Specified by:
        toArray in interface java.util.Collection<java.lang.Integer>
        Specified by:
        toArray in interface java.util.List<java.lang.Integer>
        Specified by:
        toArray in interface RichIterable<java.lang.Integer>
        Overrides:
        toArray in class AbstractRichIterable<java.lang.Integer>
        See Also:
        Collection.toArray()
      • toIntArray

        public int[] toIntArray()
        Converts the interval to an Integer array.
      • toString

        public java.lang.String toString()
        Description copied from class: AbstractRichIterable
        Returns a string with the elements of the iterable separated by commas with spaces and enclosed in square brackets.
         Assert.assertEquals("[]", Lists.mutable.empty().toString());
         Assert.assertEquals("[1]", Lists.mutable.with(1).toString());
         Assert.assertEquals("[1, 2, 3]", Lists.mutable.with(1, 2, 3).toString());
         
        Specified by:
        toString in interface RichIterable<java.lang.Integer>
        Overrides:
        toString in class AbstractRichIterable<java.lang.Integer>
        Returns:
        a string representation of this collection.
        See Also:
        AbstractCollection.toString()
      • iterator

        public java.util.Iterator<java.lang.Integer> iterator()
        Specified by:
        iterator in interface java.util.Collection<java.lang.Integer>
        Specified by:
        iterator in interface java.lang.Iterable<java.lang.Integer>
        Specified by:
        iterator in interface java.util.List<java.lang.Integer>
      • getFirst

        public java.lang.Integer getFirst()
        Description copied from interface: RichIterable
        Returns the first element of an iterable. In the case of a List it is the element at the first index. In the case of any other Collection, it is the first element that would be returned during an iteration. If the iterable is empty, null is returned. If null is a valid element of the container, then a developer would need to check to see if the iterable is empty to validate that a null result was not due to the container being empty.

        The order of Sets are not guaranteed (except for TreeSets and other Ordered Set implementations), so if you use this method, the first element could be any element from the Set.

        Specified by:
        getFirst in interface LazyIterable<java.lang.Integer>
        Specified by:
        getFirst in interface RichIterable<java.lang.Integer>
        Overrides:
        getFirst in class AbstractLazyIterable<java.lang.Integer>
      • getLast

        public java.lang.Integer getLast()
        Description copied from interface: RichIterable
        Returns the last element of an iterable. In the case of a List it is the element at the last index. In the case of any other Collection, it is the last element that would be returned during an iteration. If the iterable is empty, null is returned. If null is a valid element of the container, then a developer would need to check to see if the iterable is empty to validate that a null result was not due to the container being empty.

        The order of Sets are not guaranteed (except for TreeSets and other Ordered Set implementations), so if you use this method, the last element could be any element from the Set.

        Specified by:
        getLast in interface RichIterable<java.lang.Integer>
        Overrides:
        getLast in class AbstractLazyIterable<java.lang.Integer>
      • forEach

        public void forEach​(Procedure<? super java.lang.Integer> procedure,
                            int startIndex,
                            int endIndex)
      • forEachWithIndex

        public void forEachWithIndex​(ObjectIntProcedure<? super java.lang.Integer> objectIntProcedure,
                                     int startIndex,
                                     int endIndex)
      • get

        public java.lang.Integer get​(int index)
        Specified by:
        get in interface java.util.List<java.lang.Integer>
      • checkBounds

        private void checkBounds​(java.lang.String name,
                                 int index)
      • valueAtIndex

        private int valueAtIndex​(int index)
      • indexOf

        public int indexOf​(java.lang.Object object)
        Specified by:
        indexOf in interface java.util.List<java.lang.Integer>
      • lastIndexOf

        public int lastIndexOf​(java.lang.Object object)
        Specified by:
        lastIndexOf in interface java.util.List<java.lang.Integer>
      • add

        public boolean add​(java.lang.Integer integer)
        Specified by:
        add in interface java.util.Collection<java.lang.Integer>
        Specified by:
        add in interface java.util.List<java.lang.Integer>
      • remove

        public boolean remove​(java.lang.Object o)
        Specified by:
        remove in interface java.util.Collection<java.lang.Integer>
        Specified by:
        remove in interface java.util.List<java.lang.Integer>
      • addAll

        public boolean addAll​(java.util.Collection<? extends java.lang.Integer> collection)
        Specified by:
        addAll in interface java.util.Collection<java.lang.Integer>
        Specified by:
        addAll in interface java.util.List<java.lang.Integer>
      • addAll

        public boolean addAll​(int index,
                              java.util.Collection<? extends java.lang.Integer> collection)
        Specified by:
        addAll in interface java.util.List<java.lang.Integer>
      • removeAll

        public boolean removeAll​(java.util.Collection<?> collection)
        Specified by:
        removeAll in interface java.util.Collection<java.lang.Integer>
        Specified by:
        removeAll in interface java.util.List<java.lang.Integer>
      • retainAll

        public boolean retainAll​(java.util.Collection<?> collection)
        Specified by:
        retainAll in interface java.util.Collection<java.lang.Integer>
        Specified by:
        retainAll in interface java.util.List<java.lang.Integer>
      • clear

        public void clear()
        Specified by:
        clear in interface java.util.Collection<java.lang.Integer>
        Specified by:
        clear in interface java.util.List<java.lang.Integer>
      • set

        public java.lang.Integer set​(int index,
                                     java.lang.Integer element)
        Specified by:
        set in interface java.util.List<java.lang.Integer>
      • add

        public void add​(int index,
                        java.lang.Integer element)
        Specified by:
        add in interface java.util.List<java.lang.Integer>
      • remove

        public java.lang.Integer remove​(int index)
        Specified by:
        remove in interface java.util.List<java.lang.Integer>
      • listIterator

        public java.util.ListIterator<java.lang.Integer> listIterator()
        Specified by:
        listIterator in interface java.util.List<java.lang.Integer>
      • listIterator

        public java.util.ListIterator<java.lang.Integer> listIterator​(int index)
        Specified by:
        listIterator in interface java.util.List<java.lang.Integer>
      • subList

        public Interval subList​(int fromIndex,
                                int toIndex)
        Specified by:
        subList in interface java.util.List<java.lang.Integer>
      • take

        public LazyIterable<java.lang.Integer> take​(int count)
        Description copied from interface: LazyIterable
        Creates a deferred take iterable for the current iterable using the specified count as the limit.
        Specified by:
        take in interface LazyIterable<java.lang.Integer>
        Overrides:
        take in class AbstractLazyIterable<java.lang.Integer>
      • drop

        public LazyIterable<java.lang.Integer> drop​(int count)
        Description copied from interface: LazyIterable
        Creates a deferred drop iterable for the current iterable using the specified count as the limit.
        Specified by:
        drop in interface LazyIterable<java.lang.Integer>
        Overrides:
        drop in class AbstractLazyIterable<java.lang.Integer>
      • readObject

        private void readObject​(java.io.ObjectInputStream ois)
                         throws java.io.IOException,
                                java.lang.ClassNotFoundException
        Throws:
        java.io.IOException
        java.lang.ClassNotFoundException