Class ListUtils

java.lang.Object
org.apache.commons.collections4.ListUtils

public class ListUtils extends Object
Provides utility methods and decorators for List instances.
Since:
1.0
  • Method Details

    • defaultIfNull

      public static <T> List<T> defaultIfNull(List<T> list, List<T> defaultList)
      Returns either the passed in list, or if the list is null, the value of defaultList.
      Type Parameters:
      T - the element type
      Parameters:
      list - the list, possibly null
      defaultList - the returned values if list is null
      Returns:
      an empty list if the argument is null
      Since:
      4.0
    • emptyIfNull

      public static <T> List<T> emptyIfNull(List<T> list)
      Returns an immutable empty list if the argument is null, or the argument itself otherwise.
      Type Parameters:
      T - the element type
      Parameters:
      list - the list, possibly null
      Returns:
      an empty list if the argument is null
    • fixedSizeList

      public static <E> List<E> fixedSizeList(List<E> list)
      Returns a fixed-sized list backed by the given list. Elements may not be added or removed from the returned list, but existing elements can be changed (for instance, via the List.set(int, Object) method).
      Type Parameters:
      E - the element type
      Parameters:
      list - the list whose size to fix, must not be null
      Returns:
      a fixed-size list backed by that list
      Throws:
      NullPointerException - if the List is null
    • getFirst

      public static <T> T getFirst(List<T> list)
      Gets the first element of a list.

      Shorthand for list.get(0)

      Type Parameters:
      T - The list type.
      Parameters:
      list - The list.
      Returns:
      the first element of a list.
      Since:
      4.5
      See Also:
    • getLast

      public static <T> T getLast(List<T> list)
      Gets the last element of a list.

      Shorthand for list.get(list.size() - 1)

      Type Parameters:
      T - The list type.
      Parameters:
      list - The list.
      Returns:
      the last element of a list.
      Since:
      4.5
      See Also:
    • hashCodeForList

      public static int hashCodeForList(Collection<?> list)
      Generates a hash code using the algorithm specified in List.hashCode().

      This method is useful for implementing List when you cannot extend AbstractList. The method takes Collection instances to enable other collection types to use the List implementation algorithm.

      Parameters:
      list - the list to generate the hashCode for, may be null
      Returns:
      the hash code
      See Also:
    • indexOf

      public static <E> int indexOf(List<E> list, Predicate<E> predicate)
      Finds the first index in the given List which matches the given predicate.

      If the input List or predicate is null, or no element of the List matches the predicate, -1 is returned.

      Type Parameters:
      E - the element type
      Parameters:
      list - the List to search, may be null
      predicate - the predicate to use, may be null
      Returns:
      the first index of an Object in the List which matches the predicate or -1 if none could be found
    • intersection

      public static <E> List<E> intersection(List<? extends E> list1, List<? extends E> list2)
      Returns a new list containing all elements that are contained in both given lists.
      Type Parameters:
      E - the element type
      Parameters:
      list1 - the first list
      list2 - the second list
      Returns:
      the intersection of those two lists
      Throws:
      NullPointerException - if either list is null
    • isEqualList

      public static boolean isEqualList(Collection<?> list1, Collection<?> list2)
      Tests two lists for value-equality as per the equality contract in List.equals(Object).

      This method is useful for implementing List when you cannot extend AbstractList. The method takes Collection instances to enable other collection types to use the List implementation algorithm.

      The relevant text (slightly paraphrased as this is a static method) is:

      Compares the two list objects for equality. Returns true if and only if both lists have the same size, and all corresponding pairs of elements in the two lists are equal. (Two elements e1 and e2 are equal if (e1==null ? e2==null : e1.equals(e2)).) In other words, two lists are defined to be equal if they contain the same elements in the same order. This definition ensures that the equals method works properly across different implementations of the List interface.
      Note: The behavior of this method is undefined if the lists are modified during the equals comparison.
      Parameters:
      list1 - the first list, may be null
      list2 - the second list, may be null
      Returns:
      whether the lists are equal by value comparison
      See Also:
    • lazyList

      public static <E> List<E> lazyList(List<E> list, Factory<? extends E> factory)
      Returns a "lazy" list whose elements will be created on demand.

      When the index passed to the returned list's get method is greater than the list's size, then the factory will be used to create a new object and that object will be inserted at that index.

      For instance:

       Factory<Date> factory = new Factory<Date>() {
           public Date create() {
               return new Date();
           }
       }
       List<Date> lazy = ListUtils.lazyList(new ArrayList<Date>(), factory);
       Date date = lazy.get(3);
       
      After the above code is executed, date will refer to a new Date instance. Furthermore, that Date instance is the fourth element in the list. The first, second, and third element are all set to null.
      Type Parameters:
      E - the element type
      Parameters:
      list - the list to make lazy, must not be null
      factory - the factory for creating new objects, must not be null
      Returns:
      a lazy list backed by the given list
      Throws:
      NullPointerException - if the List or Factory is null
    • lazyList

      public static <E> List<E> lazyList(List<E> list, Transformer<Integer,? extends E> transformer)
      Returns a "lazy" list whose elements will be created on demand.

      When the index passed to the returned list's get method is greater than the list's size, then the transformer will be used to create a new object and that object will be inserted at that index.

      For instance:

       List<Integer> hours = Arrays.asList(7, 5, 8, 2);
       Transformer<Integer,Date> transformer = input -> LocalDateTime.now().withHour(hours.get(input));
       List<LocalDateTime> lazy = ListUtils.lazyList(new ArrayList<LocalDateTime>(), transformer);
       Date date = lazy.get(3);
       
      After the above code is executed, date will refer to a new Date instance. Furthermore, that Date instance is the fourth element in the list. The first, second, and third element are all set to null.
      Type Parameters:
      E - the element type
      Parameters:
      list - the list to make lazy, must not be null
      transformer - the transformer for creating new objects, must not be null
      Returns:
      a lazy list backed by the given list
      Throws:
      NullPointerException - if the List or Transformer is null
    • longestCommonSubsequence

      public static String longestCommonSubsequence(CharSequence charSequenceA, CharSequence charSequenceB)
      Returns the longest common subsequence (LCS) of two CharSequence objects.

      This is a convenience method for using longestCommonSubsequence(List, List) with CharSequence instances.

      Parameters:
      charSequenceA - the first sequence
      charSequenceB - the second sequence
      Returns:
      the longest common subsequence as String
      Throws:
      NullPointerException - if either sequence is null
      Since:
      4.0
    • longestCommonSubsequence

      public static <E> List<E> longestCommonSubsequence(List<E> a, List<E> b)
      Returns the longest common subsequence (LCS) of two sequences (lists).
      Type Parameters:
      E - the element type
      Parameters:
      a - the first list
      b - the second list
      Returns:
      the longest common subsequence
      Throws:
      NullPointerException - if either list is null
      Since:
      4.0
    • longestCommonSubsequence

      public static <E> List<E> longestCommonSubsequence(List<E> listA, List<E> listB, Equator<? super E> equator)
      Returns the longest common subsequence (LCS) of two sequences (lists).
      Type Parameters:
      E - the element type
      Parameters:
      listA - the first list
      listB - the second list
      equator - the equator used to test object equality
      Returns:
      the longest common subsequence
      Throws:
      NullPointerException - if either list or the equator is null
      Since:
      4.0
    • partition

      public static <T> List<List<T>> partition(List<T> list, int size)
      Returns consecutive sublists of a list, each of the same size (the final list may be smaller). For example, partitioning a list containing [a, b, c, d, e] with a partition size of 3 yields [[a, b, c], [d, e]] -- an outer list containing two inner lists of three and two elements, all in the original order.

      The outer list is unmodifiable, but reflects the latest state of the source list. The inner lists are sublist views of the original list, produced on demand using List.subList(int, int), and are subject to all the usual caveats about modification as explained in that API.

      Adapted from https://github.com/google/guava

      Type Parameters:
      T - the element type
      Parameters:
      list - the list to return consecutive sublists of
      size - the desired size of each sublist (the last may be smaller)
      Returns:
      a list of consecutive sublists
      Throws:
      NullPointerException - if list is null
      IllegalArgumentException - if size is not strictly positive
      Since:
      4.0
    • predicatedList

      public static <E> List<E> predicatedList(List<E> list, Predicate<E> predicate)
      Returns a predicated (validating) list backed by the given list.

      Only objects that pass the test in the given predicate can be added to the list. Trying to add an invalid object results in an IllegalArgumentException. It is important not to use the original list after invoking this method, as it is a backdoor for adding invalid objects.

      Type Parameters:
      E - the element type
      Parameters:
      list - the list to predicate, must not be null
      predicate - the predicate for the list, must not be null
      Returns:
      a predicated list backed by the given list
      Throws:
      NullPointerException - if the List or Predicate is null
    • removeAll

      public static <E> List<E> removeAll(Collection<E> collection, Collection<?> remove)
      Removes the elements in remove from collection. That is, this method returns a list containing all the elements in collection that are not in remove. The cardinality of an element e in the returned collection is the same as the cardinality of e in collection unless remove contains e, in which case the cardinality is zero. This method is useful if you do not wish to modify collection and thus cannot call collection.removeAll(remove);.

      This implementation iterates over collection, checking each element in turn to see if it's contained in remove. If it's not contained, it's added to the returned list. As a consequence, it is advised to use a collection type for remove that provides a fast (e.g. O(1)) implementation of Collection.contains(Object).

      Type Parameters:
      E - the element type
      Parameters:
      collection - the collection from which items are removed (in the returned collection)
      remove - the items to be removed from the returned collection
      Returns:
      a List containing all the elements of c except any elements that also occur in remove.
      Throws:
      NullPointerException - if either parameter is null
      Since:
      3.2
    • retainAll

      public static <E> List<E> retainAll(Collection<E> collection, Collection<?> retain)
      Returns a List containing all the elements in collection that are also in retain. The cardinality of an element e in the returned list is the same as the cardinality of e in collection unless retain does not contain e, in which case the cardinality is zero. This method is useful if you do not wish to modify the collection c and thus cannot call collection.retainAll(retain);.

      This implementation iterates over collection, checking each element in turn to see if it's contained in retain. If it's contained, it's added to the returned list. As a consequence, it is advised to use a collection type for retain that provides a fast (e.g. O(1)) implementation of Collection.contains(Object).

      Type Parameters:
      E - the element type
      Parameters:
      collection - the collection whose contents are the target of the #retailAll operation
      retain - the collection containing the elements to be retained in the returned collection
      Returns:
      a List containing all the elements of c that occur at least once in retain.
      Throws:
      NullPointerException - if either parameter is null
      Since:
      3.2
    • select

      public static <E> List<E> select(Collection<? extends E> inputCollection, Predicate<? super E> predicate)
      Selects all elements from input collection which match the given predicate into an output list.

      A null predicate matches no elements.

      Type Parameters:
      E - the element type
      Parameters:
      inputCollection - the collection to get the input from, may not be null
      predicate - the predicate to use, may be null
      Returns:
      the elements matching the predicate (new list)
      Throws:
      NullPointerException - if the input list is null
      Since:
      4.0
      See Also:
    • selectRejected

      public static <E> List<E> selectRejected(Collection<? extends E> inputCollection, Predicate<? super E> predicate)
      Selects all elements from inputCollection which don't match the given predicate into an output collection.

      If the input predicate is null, the result is an empty list.

      Type Parameters:
      E - the element type
      Parameters:
      inputCollection - the collection to get the input from, may not be null
      predicate - the predicate to use, may be null
      Returns:
      the elements not matching the predicate (new list)
      Throws:
      NullPointerException - if the input collection is null
      Since:
      4.0
      See Also:
    • subtract

      public static <E> List<E> subtract(List<E> list1, List<? extends E> list2)
      Subtracts all elements in the second list from the first list, placing the results in a new list.

      This differs from List.removeAll(Collection) in that cardinality is respected; if list1 contains two occurrences of null and list2 only contains one occurrence, then the returned list will still contain one occurrence.

      Type Parameters:
      E - the element type
      Parameters:
      list1 - the list to subtract from
      list2 - the list to subtract
      Returns:
      a new list containing the results
      Throws:
      NullPointerException - if either list is null
    • sum

      public static <E> List<E> sum(List<? extends E> list1, List<? extends E> list2)
      Returns the sum of the given lists. This is their intersection subtracted from their union.
      Type Parameters:
      E - the element type
      Parameters:
      list1 - the first list
      list2 - the second list
      Returns:
      a new list containing the sum of those lists
      Throws:
      NullPointerException - if either list is null
    • synchronizedList

      public static <E> List<E> synchronizedList(List<E> list)
      Returns a synchronized list backed by the given list.

      You must manually synchronize on the returned list's iterator to avoid non-deterministic behavior:

       List list = ListUtils.synchronizedList(myList);
       synchronized (list) {
           Iterator i = list.iterator();
           while (i.hasNext()) {
               process (i.next());
           }
       }
       
      This method is just a wrapper for Collections.synchronizedList(List).
      Type Parameters:
      E - the element type
      Parameters:
      list - the list to synchronize, must not be null
      Returns:
      a synchronized list backed by the given list
      Throws:
      NullPointerException - if the list is null
    • transformedList

      public static <E> List<E> transformedList(List<E> list, Transformer<? super E,? extends E> transformer)
      Returns a transformed list backed by the given list.

      This method returns a new list (decorating the specified list) that will transform any new entries added to it. Existing entries in the specified list will not be transformed.

      Each object is passed through the transformer as it is added to the List. It is important not to use the original list after invoking this method, as it is a backdoor for adding untransformed objects.

      Existing entries in the specified list will not be transformed. If you want that behavior, see TransformedList.transformedList(java.util.List<E>, org.apache.commons.collections4.Transformer<? super E, ? extends E>).

      Type Parameters:
      E - the element type
      Parameters:
      list - the list to predicate, must not be null
      transformer - the transformer for the list, must not be null
      Returns:
      a transformed list backed by the given list
      Throws:
      NullPointerException - if the List or Transformer is null
    • union

      public static <E> List<E> union(List<? extends E> list1, List<? extends E> list2)
      Returns a new list containing the second list appended to the first list. The List.addAll(Collection) operation is used to append the two given lists into a new list.
      Type Parameters:
      E - the element type
      Parameters:
      list1 - the first list
      list2 - the second list
      Returns:
      a new list containing the union of those lists
      Throws:
      NullPointerException - if either list is null
    • unmodifiableList

      public static <E> List<E> unmodifiableList(List<? extends E> list)
      Returns an unmodifiable list backed by the given list.

      This method uses the implementation in the decorators subpackage.

      Type Parameters:
      E - the element type
      Parameters:
      list - the list to make unmodifiable, must not be null
      Returns:
      an unmodifiable list backed by the given list
      Throws:
      NullPointerException - if the list is null