Class FluentIterable<E>

  • All Implemented Interfaces:
    java.lang.Iterable<E>

    @GwtCompatible(emulated=true)
    public abstract class FluentIterable<E>
    extends java.lang.Object
    implements java.lang.Iterable<E>
    FluentIterable provides a rich interface for manipulating Iterable instances in a chained fashion. A FluentIterable can be created from an Iterable, or from a set of elements. The following types of methods are provided on FluentIterable:

    Here is an example that merges the lists returned by two separate database calls, transforms it by invoking toString() on each element, and returns the first 10 elements as an ImmutableList:

        
    
       FluentIterable
           .from(database.getClientList())
           .filter(activeInLastMonth())
           .transform(Functions.toStringFunction())
           .limit(10)
           .toList();
     

    Anything which can be done using FluentIterable could be done in a different fashion (often with Iterables), however the use of FluentIterable makes many sets of operations significantly more concise.

    Since:
    12.0
    • Constructor Summary

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

      All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods 
      Modifier and Type Method Description
      boolean allMatch​(Predicate<? super E> predicate)
      Returns true if every element in this fluent iterable satisfies the predicate.
      boolean anyMatch​(Predicate<? super E> predicate)
      Returns true if any element in this fluent iterable satisfies the predicate.
      boolean contains​(java.lang.Object element)
      Returns true if this fluent iterable contains any object for which equals(element) is true.
      <C extends java.util.Collection<? super E>>
      C
      copyInto​(C collection)
      Copies all the elements from this fluent iterable to collection.
      FluentIterable<E> cycle()
      Returns a fluent iterable whose Iterator cycles indefinitely over the elements of this fluent iterable.
      FluentIterable<E> filter​(Predicate<? super E> predicate)
      Returns the elements from this fluent iterable that satisfy a predicate.
      <T> FluentIterable<T> filter​(java.lang.Class<T> type)
      Returns the elements from this fluent iterable that are instances of class type.
      Optional<E> first()
      Returns an Optional containing the first element in this fluent iterable.
      Optional<E> firstMatch​(Predicate<? super E> predicate)
      Returns an Optional containing the first element in this fluent iterable that satisfies the given predicate, if such an element exists.
      static <E> FluentIterable<E> from​(FluentIterable<E> iterable)
      Deprecated.
      instances of FluentIterable don't need to be converted to FluentIterable
      static <E> FluentIterable<E> from​(java.lang.Iterable<E> iterable)
      Returns a fluent iterable that wraps iterable, or iterable itself if it is already a FluentIterable.
      E get​(int position)
      Returns the element at the specified position in this fluent iterable.
      <K> ImmutableListMultimap<K,​E> index​(Function<? super E,​K> keyFunction)
      Creates an index ImmutableListMultimap that contains the results of applying a specified function to each item in this FluentIterable of values.
      boolean isEmpty()
      Determines whether this fluent iterable is empty.
      Optional<E> last()
      Returns an Optional containing the last element in this fluent iterable.
      FluentIterable<E> limit​(int size)
      Creates a fluent iterable with the first size elements of this fluent iterable.
      int size()
      Returns the number of elements in this fluent iterable.
      FluentIterable<E> skip​(int numberToSkip)
      Returns a view of this fluent iterable that skips its first numberToSkip elements.
      E[] toArray​(java.lang.Class<E> type)
      Returns an array containing all of the elements from this fluent iterable in iteration order.
      ImmutableList<E> toList()
      Returns an ImmutableList containing all of the elements from this fluent iterable in proper sequence.
      <V> ImmutableMap<E,​V> toMap​(Function<? super E,​V> valueFunction)
      Returns an immutable map for which the elements of this FluentIterable are the keys in the same order, mapped to values by the given function.
      ImmutableSet<E> toSet()
      Returns an ImmutableSet containing all of the elements from this fluent iterable with duplicates removed.
      ImmutableList<E> toSortedList​(java.util.Comparator<? super E> comparator)
      Returns an ImmutableList containing all of the elements from this FluentIterable in the order specified by comparator.
      ImmutableSortedSet<E> toSortedSet​(java.util.Comparator<? super E> comparator)
      Returns an ImmutableSortedSet containing all of the elements from this FluentIterable in the order specified by comparator, with duplicates (determined by comparator.compare(x, y) == 0) removed.
      java.lang.String toString()
      Returns a string representation of this fluent iterable, with the format [e1, e2, ..., en].
      <T> FluentIterable<T> transform​(Function<? super E,​T> function)
      Returns a fluent iterable that applies function to each element of this fluent iterable.
      <T> FluentIterable<T> transformAndConcat​(Function<? super E,​? extends java.lang.Iterable<? extends T>> function)
      Applies function to each element of this fluent iterable and returns a fluent iterable with the concatenated combination of results.
      <K> ImmutableMap<K,​E> uniqueIndex​(Function<? super E,​K> keyFunction)
      Returns an immutable map for which the Map.values() are the elements of this FluentIterable in the given order, and each key is the product of invoking a supplied function on its corresponding value.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
      • Methods inherited from interface java.lang.Iterable

        forEach, iterator, spliterator
    • Constructor Detail

      • FluentIterable

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

      • from

        public static <E> FluentIterable<E> from​(java.lang.Iterable<E> iterable)
        Returns a fluent iterable that wraps iterable, or iterable itself if it is already a FluentIterable.
      • from

        @Deprecated
        public static <E> FluentIterable<E> from​(FluentIterable<E> iterable)
        Deprecated.
        instances of FluentIterable don't need to be converted to FluentIterable
        Construct a fluent iterable from another fluent iterable. This is obviously never necessary, but is intended to help call out cases where one migration from Iterable to FluentIterable has obviated the need to explicitly convert to a FluentIterable.
      • toString

        public java.lang.String toString()
        Returns a string representation of this fluent iterable, with the format [e1, e2, ..., en].
        Overrides:
        toString in class java.lang.Object
      • size

        public final int size()
        Returns the number of elements in this fluent iterable.
      • contains

        public final boolean contains​(@Nullable
                                      java.lang.Object element)
        Returns true if this fluent iterable contains any object for which equals(element) is true.
      • cycle

        @CheckReturnValue
        public final FluentIterable<E> cycle()
        Returns a fluent iterable whose Iterator cycles indefinitely over the elements of this fluent iterable.

        That iterator supports remove() if iterable.iterator() does. After remove() is called, subsequent cycles omit the removed element, which is no longer in this fluent iterable. The iterator's hasNext() method returns true until this fluent iterable is empty.

        Warning: Typical uses of the resulting iterator may produce an infinite loop. You should use an explicit break or be certain that you will eventually remove all the elements.

      • filter

        @CheckReturnValue
        public final FluentIterable<E> filter​(Predicate<? super E> predicate)
        Returns the elements from this fluent iterable that satisfy a predicate. The resulting fluent iterable's iterator does not support remove().
      • filter

        @GwtIncompatible("Class.isInstance")
        @CheckReturnValue
        public final <T> FluentIterable<T> filter​(java.lang.Class<T> type)
        Returns the elements from this fluent iterable that are instances of class type.
        Parameters:
        type - the type of elements desired
      • anyMatch

        public final boolean anyMatch​(Predicate<? super E> predicate)
        Returns true if any element in this fluent iterable satisfies the predicate.
      • allMatch

        public final boolean allMatch​(Predicate<? super E> predicate)
        Returns true if every element in this fluent iterable satisfies the predicate. If this fluent iterable is empty, true is returned.
      • firstMatch

        public final Optional<E> firstMatch​(Predicate<? super E> predicate)
        Returns an Optional containing the first element in this fluent iterable that satisfies the given predicate, if such an element exists.

        Warning: avoid using a predicate that matches null. If null is matched in this fluent iterable, a NullPointerException will be thrown.

      • transform

        public final <T> FluentIterable<T> transform​(Function<? super E,​T> function)
        Returns a fluent iterable that applies function to each element of this fluent iterable.

        The returned fluent iterable's iterator supports remove() if this iterable's iterator does. After a successful remove() call, this fluent iterable no longer contains the corresponding element.

      • transformAndConcat

        public <T> FluentIterable<T> transformAndConcat​(Function<? super E,​? extends java.lang.Iterable<? extends T>> function)
        Applies function to each element of this fluent iterable and returns a fluent iterable with the concatenated combination of results. function returns an Iterable of results.

        The returned fluent iterable's iterator supports remove() if this function-returned iterables' iterator does. After a successful remove() call, the returned fluent iterable no longer contains the corresponding element.

        Since:
        13.0 (required Function<E, Iterable<T>> until 14.0)
      • first

        public final Optional<E> first()
        Returns an Optional containing the first element in this fluent iterable. If the iterable is empty, Optional.absent() is returned.
        Throws:
        java.lang.NullPointerException - if the first element is null; if this is a possibility, use iterator().next() or Iterables.getFirst(java.lang.Iterable<? extends T>, T) instead.
      • last

        public final Optional<E> last()
        Returns an Optional containing the last element in this fluent iterable. If the iterable is empty, Optional.absent() is returned.
        Throws:
        java.lang.NullPointerException - if the last element is null; if this is a possibility, use Iterables.getLast(java.lang.Iterable<T>) instead.
      • skip

        @CheckReturnValue
        public final FluentIterable<E> skip​(int numberToSkip)
        Returns a view of this fluent iterable that skips its first numberToSkip elements. If this fluent iterable contains fewer than numberToSkip elements, the returned fluent iterable skips all of its elements.

        Modifications to this fluent iterable before a call to iterator() are reflected in the returned fluent iterable. That is, the its iterator skips the first numberToSkip elements that exist when the iterator is created, not when skip() is called.

        The returned fluent iterable's iterator supports remove() if the Iterator of this fluent iterable supports it. Note that it is not possible to delete the last skipped element by immediately calling remove() on the returned fluent iterable's iterator, as the Iterator contract states that a call to * remove() before a call to next() will throw an IllegalStateException.

      • limit

        @CheckReturnValue
        public final FluentIterable<E> limit​(int size)
        Creates a fluent iterable with the first size elements of this fluent iterable. If this fluent iterable does not contain that many elements, the returned fluent iterable will have the same behavior as this fluent iterable. The returned fluent iterable's iterator supports remove() if this fluent iterable's iterator does.
        Parameters:
        size - the maximum number of elements in the returned fluent iterable
        Throws:
        java.lang.IllegalArgumentException - if size is negative
      • isEmpty

        public final boolean isEmpty()
        Determines whether this fluent iterable is empty.
      • toList

        public final ImmutableList<E> toList()
        Returns an ImmutableList containing all of the elements from this fluent iterable in proper sequence.
        Since:
        14.0 (since 12.0 as toImmutableList()).
      • toSortedList

        @Beta
        public final ImmutableList<E> toSortedList​(java.util.Comparator<? super E> comparator)
        Returns an ImmutableList containing all of the elements from this FluentIterable in the order specified by comparator. To produce an ImmutableList sorted by its natural ordering, use toSortedList(Ordering.natural()).
        Parameters:
        comparator - the function by which to sort list elements
        Throws:
        java.lang.NullPointerException - if any element is null
        Since:
        14.0 (since 13.0 as toSortedImmutableList()).
      • toSet

        public final ImmutableSet<E> toSet()
        Returns an ImmutableSet containing all of the elements from this fluent iterable with duplicates removed.
        Since:
        14.0 (since 12.0 as toImmutableSet()).
      • toSortedSet

        public final ImmutableSortedSet<E> toSortedSet​(java.util.Comparator<? super E> comparator)
        Returns an ImmutableSortedSet containing all of the elements from this FluentIterable in the order specified by comparator, with duplicates (determined by comparator.compare(x, y) == 0) removed. To produce an ImmutableSortedSet sorted by its natural ordering, use toSortedSet(Ordering.natural()).
        Parameters:
        comparator - the function by which to sort set elements
        Throws:
        java.lang.NullPointerException - if any element is null
        Since:
        14.0 (since 12.0 as toImmutableSortedSet()).
      • toMap

        public final <V> ImmutableMap<E,​V> toMap​(Function<? super E,​V> valueFunction)
        Returns an immutable map for which the elements of this FluentIterable are the keys in the same order, mapped to values by the given function. If this iterable contains duplicate elements, the returned map will contain each distinct element once in the order it first appears.
        Throws:
        java.lang.NullPointerException - if any element of this iterable is null, or if valueFunction produces null for any key
        Since:
        14.0
      • index

        public final <K> ImmutableListMultimap<K,​E> index​(Function<? super E,​K> keyFunction)
        Creates an index ImmutableListMultimap that contains the results of applying a specified function to each item in this FluentIterable of values. Each element of this iterable will be stored as a value in the resulting multimap, yielding a multimap with the same size as this iterable. The key used to store that value in the multimap will be the result of calling the function on that value. The resulting multimap is created as an immutable snapshot. In the returned multimap, keys appear in the order they are first encountered, and the values corresponding to each key appear in the same order as they are encountered.
        Parameters:
        keyFunction - the function used to produce the key for each value
        Throws:
        java.lang.NullPointerException - if any of the following cases is true:
        • keyFunction is null
        • An element in this fluent iterable is null
        • keyFunction returns null for any element of this iterable
        Since:
        14.0
      • uniqueIndex

        public final <K> ImmutableMap<K,​E> uniqueIndex​(Function<? super E,​K> keyFunction)
        Returns an immutable map for which the Map.values() are the elements of this FluentIterable in the given order, and each key is the product of invoking a supplied function on its corresponding value.
        Parameters:
        keyFunction - the function used to produce the key for each value
        Throws:
        java.lang.IllegalArgumentException - if keyFunction produces the same key for more than one value in this fluent iterable
        java.lang.NullPointerException - if any element of this fluent iterable is null, or if keyFunction produces null for any value
        Since:
        14.0
      • toArray

        @GwtIncompatible("Array.newArray(Class, int)")
        public final E[] toArray​(java.lang.Class<E> type)
        Returns an array containing all of the elements from this fluent iterable in iteration order.
        Parameters:
        type - the type of the elements
        Returns:
        a newly-allocated array into which all the elements of this fluent iterable have been copied
      • copyInto

        public final <C extends java.util.Collection<? super E>> C copyInto​(C collection)
        Copies all the elements from this fluent iterable to collection. This is equivalent to calling Iterables.addAll(collection, this).
        Parameters:
        collection - the collection to copy elements to
        Returns:
        collection, for convenience
        Since:
        14.0
      • get

        public final E get​(int position)
        Returns the element at the specified position in this fluent iterable.
        Parameters:
        position - position of the element to return
        Returns:
        the element at the specified position in this fluent iterable
        Throws:
        java.lang.IndexOutOfBoundsException - if position is negative or greater than or equal to the size of this fluent iterable