Class AbstractImmutableList.ImmutableSubList<T>

All Implemented Interfaces:
Serializable, Iterable<T>, Collection<T>, List<T>, RandomAccess, SequencedCollection<T>, ImmutableCollection<T>, InternalIterable<T>, ImmutableList<T>, ListIterable<T>, OrderedIterable<T>, ReversibleIterable<T>, RichIterable<T>
Enclosing class:
AbstractImmutableList<T>

protected static class AbstractImmutableList.ImmutableSubList<T> extends AbstractImmutableList<T> implements Serializable, RandomAccess
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • original

      private final ImmutableList<T> original
    • offset

      private final int offset
    • size

      private final int size
  • Constructor Details

    • ImmutableSubList

      protected ImmutableSubList(ImmutableList<T> list, int fromIndex, int toIndex)
  • Method Details

    • get

      public T get(int index)
      Description copied from interface: ListIterable
      Returns the item at the specified position in this list iterable.
      Specified by:
      get in interface List<T>
      Specified by:
      get in interface ListIterable<T>
    • size

      public int size()
      Description copied from interface: RichIterable
      Returns the number of items in this iterable.
      Specified by:
      size in interface Collection<T>
      Specified by:
      size in interface List<T>
      Specified by:
      size in interface RichIterable<T>
    • newWith

      public ImmutableList<T> newWith(T newItem)
      Description copied from interface: ImmutableCollection
      This method is similar to the with method in MutableCollection with the difference that a new copy of this collection with the element appended will be returned.
      Specified by:
      newWith in interface ImmutableCollection<T>
      Specified by:
      newWith in interface ImmutableList<T>
    • writeReplace

      protected Object writeReplace()
    • iterator

      public Iterator<T> iterator()
      Specified by:
      iterator in interface Collection<T>
      Specified by:
      iterator in interface Iterable<T>
      Specified by:
      iterator in interface List<T>
      Overrides:
      iterator in class AbstractImmutableList<T>
    • subList

      public AbstractImmutableList.ImmutableSubList<T> subList(int fromIndex, int toIndex)
      Specified by:
      subList in interface ImmutableList<T>
      Specified by:
      subList in interface List<T>
      Specified by:
      subList in interface ListIterable<T>
      Overrides:
      subList in class AbstractImmutableList<T>
      See Also:
    • checkIfOutOfBounds

      private void checkIfOutOfBounds(int index)
    • getFirst

      public T 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 List<T>
      Specified by:
      getFirst in interface ListIterable<T>
      Specified by:
      getFirst in interface OrderedIterable<T>
      Specified by:
      getFirst in interface RichIterable<T>
      Specified by:
      getFirst in interface SequencedCollection<T>
      Overrides:
      getFirst in class AbstractImmutableList<T>
    • getLast

      public T 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 List<T>
      Specified by:
      getLast in interface ListIterable<T>
      Specified by:
      getLast in interface OrderedIterable<T>
      Specified by:
      getLast in interface RichIterable<T>
      Specified by:
      getLast in interface SequencedCollection<T>
      Overrides:
      getLast in class AbstractImmutableList<T>
    • toStack

      public MutableStack<T> toStack()
      Description copied from interface: OrderedIterable
      Converts the OrderedIterable to a mutable MutableStack implementation.
      Specified by:
      toStack in interface OrderedIterable<T>
    • each

      public void each(Procedure<? super T> 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<T>
      See Also:
    • forEachWithIndex

      public void forEachWithIndex(ObjectIntProcedure<? super T> 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<T>
      Specified by:
      forEachWithIndex in interface OrderedIterable<T>
      Overrides:
      forEachWithIndex in class AbstractImmutableList<T>
    • forEachWith

      public <P> void forEachWith(Procedure2<? super T,? 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<T>
      Overrides:
      forEachWith in class AbstractImmutableList<T>