Package: java.util

## Interface List

- - ### Methods Summary

    Methods
    Return type | Name and parameters
    --- | ---
    `boolean` | `addAll(int index, Object[] items)` Modifies this list by inserting all of the elements in the specified array into the list at the specified position.
    `List` | `asImmutable()` A convenience method for creating an immutable list
    `List` | `asSynchronized()` A convenience method for creating a synchronized List.
    `List` | `collate(int size)` Collates this list into sub-lists of length `size`.
    `List` | `collate(int size, boolean keepRemainder)` Collates this list into sub-lists of length `size`.
    `List` | `collate(int size, int step)` Collates this list into sub-lists of length `size` stepping through the code `step` elements for each subList.
    `List` | `collate(int size, int step, boolean keepRemainder)` Collates this list into sub-lists of length `size` stepping through the code `step` elements for each sub-list.
    `List` | `drop(int num)` Drops the given number of elements from the head of this list if they are available.
    `List` | `dropWhile(Closure condition)` Returns a suffix of this List where elements are dropped from the front while the given Closure evaluates to true.
    `boolean` | `equals(Object[] right)` Determines if the contents of this list are equal to the contents of the given array in the same order.
    `boolean` | `equals(List right)` Compare the contents of two Lists.
    `Process` | `execute()` Executes the command specified by the given list.
    `Process` | `execute(String[] envp, File dir)` Executes the command specified by the given list, with the environment defined by `envp` and under the working directory `dir`.
    `Process` | `execute(List envp, File dir)` Executes the command specified by the given list, with the environment defined by `envp` and under the working directory `dir`.
    `Object` | `first()` Returns the first item from the List.
    `List` | `getAt(EmptyRange range)` Support the range subscript operator for a List.
    `List` | `getAt(Range range)` Support the range subscript operator for a List.
    `Object` | `getAt(int idx)` Support the subscript operator for a List.
    `List` | `getAt(Collection indices)` Select a List of items from a List using a Collection to identify the indices to be selected.
    `Object` | `head()` Returns the first item from the List.
    `Object` | `last()` Returns the last item from the List.
    `List` | `minus(Iterable removeMe)` Create a List composed of the elements of the first list minus every occurrence of elements of the given Iterable.
    `List` | `minus(Object removeMe)` Create a new List composed of the elements of the first list minus every occurrence of the given element to remove.
    `List` | `minus(Collection removeMe)` Create a List composed of the elements of the first list minus every occurrence of elements of the given Collection.
    `Set` | `permutations()` Finds all permutations of a collection.
    `List` | `permutations(Closure function)` Finds all permutations of a collection, applies a function to each permutation and collects the result into a list.
    `List` | `plus(int index, Iterable additions)` Creates a new List by inserting all of the elements in the given Iterable to the elements from this List at the specified index.
    `List` | `plus(int index, Object[] items)` Creates a new List by inserting all of the elements in the specified array to the elements from the original List at the specified index.
    `List` | `plus(int index, List additions)` Creates a new List by inserting all of the elements in the given additions List to the elements from the original List at the specified index.
    `Object` | `pop()` Removes the last item from the List.
    `boolean` | `push(Object value)` Appends an item to the List.
    `void` | `putAt(EmptyRange range, Object value)` A helper method to allow lists to work with subscript operators.
    `void` | `putAt(EmptyRange range, Collection value)` A helper method to allow lists to work with subscript operators.
    `void` | `putAt(IntRange range, Object value)` List subscript assignment operator when given a range as the index.
    `void` | `putAt(IntRange range, Collection col)` List subscript assignment operator when given a range as the index and the assignment operand is a collection.
    `void` | `putAt(int idx, Object value)` A helper method to allow lists to work with subscript operators.
    `void` | `putAt(List splice, Object value)` A helper method to allow lists to work with subscript operators.
    `void` | `putAt(List splice, List values)` A helper method to allow lists to work with subscript operators.
    `List` | `reverse()` Creates a new List with the identical contents to this list but in reverse order.
    `List` | `reverse(boolean mutate)` Reverses the elements in a list.
    `List` | `reverseEach(Closure closure)` Iterate over each element of the list in the reverse order.
    `Set` | `subsequences()` Finds all non-null subsequences of a list.
    `List` | `tail()` Returns the items from the List excluding the first item.
    `List` | `take(int num)` Returns the first `num` elements from the head of this list.
    `List` | `takeWhile(Closure condition)` Returns the longest prefix of this list where each element passed to the given closure condition evaluates to true.
    `SpreadMap` | `toSpreadMap()` Creates a spreadable map from this list.
    `List` | `transpose()` Adds GroovyCollections#transpose(List) as a method on lists.
    `List` | `withDefault(Closure init)` An alias for `withLazyDefault` which decorates a list allowing it to grow when called with index values outside the normal list bounds.
    `List` | `withEagerDefault(Closure init)` Decorates a list allowing it to grow when called with a non-existent index value.
    `List` | `withLazyDefault(Closure init)` Decorates a list allowing it to grow when called with a non-existent index value.

  - #### Methods inherited from interface java.util.Collection

    `addAll`, `asBoolean`, `asImmutable`, `asSynchronized`, `asType`, `collect`, `collect`, `collect`, `collectAll`, `collectAll`, `collectNested`, `containsAll`, `disjoint`, `eachPermutation`, `find`, `find`, `findAll`, `findAll`, `findResult`, `findResult`, `flatten`, `flatten`, `getAt`, `grep`, `grep`, `groupBy`, `inject`, `inject`, `intersect`, `isCase`, `leftShift`, `multiply`, `plus`, `plus`, `plus`, `removeAll`, `removeAll`, `retainAll`, `retainAll`, `sort`, `split`, `toList`, `toListString`, `toListString`, `toSet`, `unique`, `unique`, `unique`, `unique`, `unique`, `unique`

  - #### Methods inherited from interface java.lang.Iterable

    `any`, `asList`, `collectEntries`, `collectEntries`, `collectEntries`, `collectEntries`, `collectMany`, `collectMany`, `collectNested`, `collectNested`, `combinations`, `combinations`, `count`, `count`, `countBy`, `drop`, `dropWhile`, `each`, `eachCombination`, `eachWithIndex`, `every`, `findResults`, `first`, `flatten`, `flatten`, `getAt`, `groupBy`, `groupBy`, `groupBy`, `join`, `last`, `max`, `max`, `max`, `min`, `min`, `min`, `sort`, `sort`, `sort`, `sort`, `sort`, `sum`, `sum`, `sum`, `sum`, `take`, `takeWhile`, `toList`

- - ### Methods Detail

    - #### public boolean addAll(int index, Object[] items)

      Modifies this list by inserting all of the elements in the specified array into the list at the specified position. Shifts the element currently at that position (if any) and any subsequent elements to the right (increases their indices). The new elements will appear in this list in the order that they occur in the array. The behavior of this operation is undefined if the specified array is modified while the operation is in progress. See also `plus` for similar functionality with copy semantics, i.e. which produces a new list after adding the additional items at the specified position but leaves the original list unchanged.

      Parameters:
        `items` - array containing elements to be added to this collection
        `index` - index at which to insert the first element from the specified array
      Returns:
        `true` if this collection changed as a result of the call
      Since:
        1.7.2
      See Also:
        List#addAll(int, Collection)

    - #### public List asImmutable()

      A convenience method for creating an immutable list

      Returns:
        an immutable List
      Since:
        1.0
      See Also:
        Collections#unmodifiableList(java.util.List)

    - #### public List asSynchronized()

      A convenience method for creating a synchronized List.

      Returns:
        a synchronized List
      Since:
        1.0
      See Also:
        Collections#synchronizedList(java.util.List)

    - #### public List collate(int size)

      Collates this list into sub-lists of length `size`. Example:

          def list = [ 1, 2, 3, 4, 5, 6, 7 ]
          def coll = list.collate( 3 )
          assert coll == [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7 ] ]

      Parameters:
        `size` - the length of each sub-list in the returned list
      Returns:
        a List containing the data collated into sub-lists
      Since:
        1.8.6

    - #### public List collate(int size, boolean keepRemainder)

      Collates this list into sub-lists of length `size`. Any remaining elements in the list after the subdivision will be dropped if `keepRemainder` is false. Example:

          def list = [ 1, 2, 3, 4, 5, 6, 7 ]
          def coll = list.collate( 3, false )
          assert coll == [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]

      Parameters:
        `size` - the length of each sub-list in the returned list
        `keepRemainder` - if true, any rmeaining elements are returned as sub-lists. Otherwise they are discarded
      Returns:
        a List containing the data collated into sub-lists
      Since:
        1.8.6

    - #### public List collate(int size, int step)

      Collates this list into sub-lists of length `size` stepping through the code `step` elements for each subList. Example:

          def list = [ 1, 2, 3, 4 ]
          def coll = list.collate( 3, 1 )
          assert coll == [ [ 1, 2, 3 ], [ 2, 3, 4 ], [ 3, 4 ], [ 4 ] ]

      Parameters:
        `size` - the length of each sub-list in the returned list
        `step` - the number of elements to step through for each sub-list
      Returns:
        a List containing the data collated into sub-lists
      Since:
        1.8.6

    - #### public List collate(int size, int step, boolean keepRemainder)

      Collates this list into sub-lists of length `size` stepping through the code `step` elements for each sub-list. Any remaining elements in the list after the subdivision will be dropped if `keepRemainder` is false. Example:

          def list = [ 1, 2, 3, 4 ]
          assert list.collate( 3, 1, true  ) == [ [ 1, 2, 3 ], [ 2, 3, 4 ], [ 3, 4 ], [ 4 ] ]
          assert list.collate( 3, 1, false ) == [ [ 1, 2, 3 ], [ 2, 3, 4 ] ]

      Parameters:
        `size` - the length of each sub-list in the returned list
        `step` - the number of elements to step through for each sub-list
        `keepRemainder` - if true, any rmeaining elements are returned as sub-lists. Otherwise they are discarded
      Returns:
        a List containing the data collated into sub-lists
      Since:
        1.8.6

    - #### public List drop(int num)

      Drops the given number of elements from the head of this list if they are available.

          def strings = [ 'a', 'b', 'c' ]
          assert strings.drop( 0 ) == [ 'a', 'b', 'c' ]
          assert strings.drop( 2 ) == [ 'c' ]
          assert strings.drop( 5 ) == []

      Similar to Iterable#drop(int) except that it attempts to preserve the type of the original list.
      Parameters:
        `num` - the number of elements to drop from this list
      Returns:
        a list consisting of all elements of this list except the first `num` ones, or else the empty list, if this list has less than `num` elements.
      Since:
        1.8.1

    - #### public List dropWhile(Closure condition)

      Returns a suffix of this List where elements are dropped from the front while the given Closure evaluates to true. Similar to Iterable#dropWhile(groovy.lang.Closure) except that it attempts to preserve the type of the original list.

          def nums = [ 1, 3, 2 ]
          assert nums.dropWhile{ it < 4 } == []
          assert nums.dropWhile{ it < 3 } == [ 3, 2 ]
          assert nums.dropWhile{ it != 2 } == [ 2 ]
          assert nums.dropWhile{ it == 0 } == [ 1, 3, 2 ]

      Parameters:
        `condition` - the closure that must evaluate to true to continue dropping elements
      Returns:
        the shortest suffix of the given List such that the given closure condition evaluates to true for each element dropped from the front of the List
      Since:
        1.8.7

    - #### public boolean equals(Object[] right)

      Determines if the contents of this list are equal to the contents of the given array in the same order. This returns `false` if either collection is `null`.

          assert [1, "a"].equals( [ 1, "a" ] as Object[] )

      Parameters:
        `right` - the Object[] being compared to
      Returns:
        true if the contents of both collections are equal
      Since:
        1.5.0

    - #### public boolean equals(List right)

      Compare the contents of two Lists. Order matters. If numbers exist in the Lists, then they are compared as numbers, for example 2 == 2L. If both lists are `null`, the result is true; otherwise if either list is `null`, the result is `false`.

          assert ["a", 2].equals(["a", 2])
          assert ![2, "a"].equals("a", 2)
          assert [2.0, "a"].equals(2L, "a") // number comparison at work

      Parameters:
        `right` - the List being compared to
      Returns:
        boolean `true` if the contents of both lists are identical, `false` otherwise.
      Since:
        1.0

    - #### public Process execute()

      Executes the command specified by the given list. The toString() method is called for each item in the list to convert into a resulting String. The first item in the list is the command the others are the parameters.

      For more control over Process construction you can use `java.lang.ProcessBuilder`.

      Returns:
        the Process which has just started for this command line representation.
      Since:
        1.0

    - #### public Process execute(String[] envp, File dir)

      Executes the command specified by the given list, with the environment defined by `envp` and under the working directory `dir`. The first item in the list is the command; the others are the parameters. The toString() method is called on items in the list to convert them to Strings.

      For more control over Process construction you can use `java.lang.ProcessBuilder`.

      Parameters:
        `envp` - an array of Strings, each member of which has environment variable settings in the format name=value, or `null` if the subprocess should inherit the environment of the current process.
        `dir` - the working directory of the subprocess, or `null` if the subprocess should inherit the working directory of the current process.
      Returns:
        the Process which has just started for this command line representation.
      Since:
        1.7.1

    - #### public Process execute(List envp, File dir)

      Executes the command specified by the given list, with the environment defined by `envp` and under the working directory `dir`. The first item in the list is the command; the others are the parameters. The toString() method is called on items in the list to convert them to Strings.

      For more control over Process construction you can use `java.lang.ProcessBuilder`.

      Parameters:
        `envp` - a List of Objects (converted to Strings using toString), each member of which has environment variable settings in the format name=value, or `null` if the subprocess should inherit the environment of the current process.
        `dir` - the working directory of the subprocess, or `null` if the subprocess should inherit the working directory of the current process.
      Returns:
        the Process which has just started for this command line representation.
      Since:
        1.7.1

    - #### public Object first()

      Returns the first item from the List.

          def list = [3, 4, 2]
          assert list.first() == 3
          // check original is unaltered
          assert list == [3, 4, 2]

      Returns:
        the first item from the List
      Since:
        1.5.5

    - #### public List getAt(EmptyRange range)

      Support the range subscript operator for a List.

          def list = [true, 1, 3.4]
          assert list[0..<0] == []

      Parameters:
        `range` - a Range indicating the items to get
      Returns:
        a new list instance based on range borders
      Since:
        1.0

    - #### public List getAt(Range range)

      Support the range subscript operator for a List.

          def list = [1, "a", 4.5, true]
          assert list[1..2] == ["a", 4.5]

      Parameters:
        `range` - a Range indicating the items to get
      Returns:
        a new list instance based on range borders
      Since:
        1.0

    - #### public Object getAt(int idx)

      Support the subscript operator for a List.

          def list = [2, "a", 5.3]
          assert list[1] == "a"

      Parameters:
        `idx` - an index
      Returns:
        the value at the given index
      Since:
        1.0

    - #### public List getAt(Collection indices)

      Select a List of items from a List using a Collection to identify the indices to be selected.

          def list = [true, 1, 3.4, false]
          assert list[1,0,2] == [1, true, 3.4]

      Parameters:
        `indices` - a Collection of indices
      Returns:
        a new list of the values at the given indices
      Since:
        1.0

    - #### public Object head()

      Returns the first item from the List.

          def list = [3, 4, 2]
          assert list.head() == 3
          assert list == [3, 4, 2]

      Returns:
        the first item from the List
      Since:
        1.5.5

    - #### public Object last()

      Returns the last item from the List.

          def list = [3, 4, 2]
          assert list.last() == 2
          // check original is unaltered
          assert list == [3, 4, 2]

      Returns:
        the last item from the List
      Since:
        1.5.5

    - #### public List minus(Iterable removeMe)

      Create a List composed of the elements of the first list minus every occurrence of elements of the given Iterable.

          class AbcIterable implements Iterable {
              Iterator iterator() { "abc".iterator() }
          }
          assert "backtrack".toList() - new AbcIterable() == ["k", "t", "r", "k"]

      Parameters:
        `removeMe` - an Iterable of elements to remove
      Returns:
        a List with the supplied elements removed
      Since:
        1.8.7

    - #### public List minus(Object removeMe)

      Create a new List composed of the elements of the first list minus every occurrence of the given element to remove.

          assert ["a", 5, 5, true] - 5 == ["a", true]

      Parameters:
        `removeMe` - an element to remove from the list
      Returns:
        the resulting List with the given element removed
      Since:
        1.0

    - #### public List minus(Collection removeMe)

      Create a List composed of the elements of the first list minus every occurrence of elements of the given Collection.

          assert [1, "a", true, true, false, 5.3] - [true, 5.3] == [1, "a", false]

      Parameters:
        `removeMe` - a Collection of elements to remove
      Returns:
        a List with the given elements removed
      Since:
        1.0

    - #### public Set permutations()

      Finds all permutations of a collection.

      Example usage:

          def result = [1, 2, 3].permutations()
          assert result == [[3, 2, 1], [3, 1, 2], [1, 3, 2], [2, 3, 1], [2, 1, 3], [1, 2, 3]] as Set

      Returns:
        the permutations from the list
      Since:
        1.7.0

    - #### public List permutations(Closure function)

      Finds all permutations of a collection, applies a function to each permutation and collects the result into a list.

      Example usage:

          Set result = [1, 2, 3].permutations { it.collect { v -> 2*v }}
          assert result == [[6, 4, 2], [6, 2, 4], [2, 6, 4], [4, 6, 2], [4, 2, 6], [2, 4, 6]] as Set

      Parameters:
        `function` - the function to apply on each permutation
      Returns:
        the list of results of the application of the function on each permutation
      Since:
        2.2.0

    - #### public List plus(int index, Iterable additions)

      Creates a new List by inserting all of the elements in the given Iterable to the elements from this List at the specified index.

      Parameters:
        `additions` - an Iterable containing elements to be merged with the elements from the original List
        `index` - index at which to insert the first element from the given additions Iterable
      Returns:
        the new list
      Since:
        1.8.7
      See Also:
        List#plus(int, List)

    - #### public List plus(int index, Object[] items)

      Creates a new List by inserting all of the elements in the specified array to the elements from the original List at the specified index. Shifts the element currently at that index (if any) and any subsequent elements to the right (increasing their indices). The new elements will appear in the resulting List in the order that they occur in the original array. The behavior of this operation is undefined if the list or array operands are modified while the operation is in progress. The original list and array operands remain unchanged.

          def items = [1, 2, 3]
          def newItems = items.plus(2, 'a'..'c' as String[])
          assert newItems == [1, 2, 'a', 'b', 'c', 3]
          assert items == [1, 2, 3]

      See also `addAll` for similar functionality with modify semantics, i.e. which performs the changes on the original list itself.
      Parameters:
        `items` - array containing elements to be merged with elements from the original list
        `index` - index at which to insert the first element from the specified array
      Returns:
        the new list
      Since:
        1.8.1
      See Also:
        List#plus(int, List)

    - #### public List plus(int index, List additions)

      Creates a new List by inserting all of the elements in the given additions List to the elements from the original List at the specified index. Shifts the element currently at that index (if any) and any subsequent elements to the right (increasing their indices). The new elements will appear in the resulting List in the order that they occur in the original lists. The behavior of this operation is undefined if the original lists are modified while the operation is in progress. The original lists remain unchanged.

          def items = [1, 2, 3]
          def newItems = items.plus(2, 'a'..'c')
          assert newItems == [1, 2, 'a', 'b', 'c', 3]
          assert items == [1, 2, 3]

      See also `addAll` for similar functionality with modify semantics, i.e. which performs the changes on the original list itself.
      Parameters:
        `additions` - a List containing elements to be merged with elements from the original List
        `index` - index at which to insert the first element from the given additions List
      Returns:
        the new list
      Since:
        1.8.1

    - #### public Object pop()

      Removes the last item from the List. Using add() and pop() is similar to push and pop on a Stack.

          def list = ["a", false, 2]
          assert list.pop() == 2
          assert list == ["a", false]

      Returns:
        the item removed from the List
      Since:
        1.0

    - #### public boolean push(Object value)

      Appends an item to the List. Synonym for add().

          def list = [3, 4, 2]
          list.push("x")
          assert list == [3, 4, 2, "x"]

      Parameters:
        `value` - element to be appended to this list.
      Returns:
        `true` (as per the general contract of the `Collection.add` method).
      Since:
        1.5.5

    - #### public void putAt(EmptyRange range, Object value)

      A helper method to allow lists to work with subscript operators.

          def list = ["a", true]
          list[1..<1] = 5
          assert list == ["a", 5, true]

      Parameters:
        `range` - the (in this case empty) subset of the list to set
        `value` - the values to put at the given sublist or a Collection of values
      Since:
        1.0

    - #### public void putAt(EmptyRange range, Collection value)

      A helper method to allow lists to work with subscript operators.

          def list = ["a", true]
          list[1..<1] = [4, 3, 2]
          assert list == ["a", 4, 3, 2, true]

      Parameters:
        `range` - the (in this case empty) subset of the list to set
        `value` - the Collection of values
      Since:
        1.0
      See Also:
        List#putAt(groovy.lang.EmptyRange, java.lang.Object)

    - #### public void putAt(IntRange range, Object value)

      List subscript assignment operator when given a range as the index. Example:

          def myList = [4, 3, 5, 1, 2, 8, 10]
          myList[3..5] = "b"
          assert myList == [4, 3, 5, "b", 10]

      Items in the given range are replaced with the operand. The `value` operand is always treated as a single value.
      Parameters:
        `range` - the subset of the list to set
        `value` - the value to put at the given sublist
      Since:
        1.0

    - #### public void putAt(IntRange range, Collection col)

      List subscript assignment operator when given a range as the index and the assignment operand is a collection. Example:

          def myList = [4, 3, 5, 1, 2, 8, 10]
          myList[3..5] = ["a", true]
          assert myList == [4, 3, 5, "a", true, 10]

      Items in the given range are replaced with items from the collection.
      Parameters:
        `range` - the subset of the list to set
        `col` - the collection of values to put at the given sublist
      Since:
        1.5.0

    - #### public void putAt(int idx, Object value)

      A helper method to allow lists to work with subscript operators.

          def list = [2, 3]
          list[0] = 1
          assert list == [1, 3]

      Parameters:
        `idx` - an index
        `value` - the value to put at the given index
      Since:
        1.0

    - #### public void putAt(List splice, Object value)

      A helper method to allow lists to work with subscript operators.

          def list = ["a", true, 42, 9.4]
          list[1, 3] = 5
          assert list == ["a", 5, 42, 5]

      Parameters:
        `splice` - the subset of the list to set
        `value` - the value to put at the given sublist
      Since:
        1.0

    - #### public void putAt(List splice, List values)

      A helper method to allow lists to work with subscript operators.

          def list = ["a", true, 42, 9.4]
          list[1, 4] = ["x", false]
          assert list == ["a", "x", 42, 9.4, false]

      Parameters:
        `splice` - the subset of the list to set
        `values` - the value to put at the given sublist
      Since:
        1.0

    - #### public List reverse()

      Creates a new List with the identical contents to this list but in reverse order.

          def list = ["a", 4, false]
          assert list.reverse() == [false, 4, "a"]
          assert list == ["a", 4, false]

      Returns:
        a reversed List
      Since:
        1.0
      See Also:
        List#reverse(boolean)

    - #### public List reverse(boolean mutate)

      Reverses the elements in a list. If mutate is true, the original list is modified in place and returned. Otherwise, a new list containing the reversed items is produced.

          def list = ["a", 4, false]
          assert list.reverse(false) == [false, 4, "a"]
          assert list == ["a", 4, false]
          assert list.reverse(true) == [false, 4, "a"]
          assert list == [false, 4, "a"]

      Parameters:
        `mutate` - true if the list itself should be reversed in place and returned, false if a new list should be created
      Returns:
        a reversed List
      Since:
        1.8.1

    - #### public List reverseEach(Closure closure)

      Iterate over each element of the list in the reverse order.

          def result = []
          [1,2,3].reverseEach { result << it }
          assert result == [3,2,1]

      Parameters:
        `closure` - a closure to which each item is passed.
      Returns:
        the original list
      Since:
        1.5.0

    - #### public Set subsequences()

      Finds all non-null subsequences of a list.

      Example usage:

          def result = [1, 2, 3].subsequences()
          assert result == [[1, 2, 3], [1, 3], [2, 3], [1, 2], [1], [2], [3]] as Set

      Returns:
        the subsequences from the list
      Since:
        1.7.0

    - #### public List tail()

      Returns the items from the List excluding the first item.

          def list = [3, 4, 2]
          assert list.tail() == [4, 2]
          assert list == [3, 4, 2]

      Returns:
        a list without its first element
      Since:
        1.5.6

    - #### public List take(int num)

      Returns the first `num` elements from the head of this list.

          def strings = [ 'a', 'b', 'c' ]
          assert strings.take( 0 ) == []
          assert strings.take( 2 ) == [ 'a', 'b' ]
          assert strings.take( 5 ) == [ 'a', 'b', 'c' ]

      Similar to Iterable#take(int) except that it attempts to preserve the type of the original list.
      Parameters:
        `num` - the number of elements to take from this list
      Returns:
        a list consisting of the first `num` elements of this list, or else the whole list if it has less then `num` elements.
      Since:
        1.8.1

    - #### public List takeWhile(Closure condition)

      Returns the longest prefix of this list where each element passed to the given closure condition evaluates to true. Similar to Iterable#takeWhile(groovy.lang.Closure) except that it attempts to preserve the type of the original list.

          def nums = [ 1, 3, 2 ]
          assert nums.takeWhile{ it < 1 } == []
          assert nums.takeWhile{ it < 3 } == [ 1 ]
          assert nums.takeWhile{ it < 4 } == [ 1, 3, 2 ]

      Parameters:
        `condition` - the closure that must evaluate to true to continue taking elements
      Returns:
        a prefix of the given list where each element passed to the given closure evaluates to true
      Since:
        1.8.7

    - #### public SpreadMap toSpreadMap()

      Creates a spreadable map from this list.

      Returns:
        a newly created SpreadMap
      Since:
        1.8.0
      See Also:
        SpreadMap#SpreadMap(java.util.List)
        Map#toSpreadMap()

    - #### public List transpose()

      Adds GroovyCollections#transpose(List) as a method on lists. A Transpose Function takes a collection of columns and returns a collection of rows. The first row consists of the first element from each column. Successive rows are constructed similarly.

      Example usage:

          def result = [['a', 'b'], [1, 2]].transpose()
          assert result == [['a', 1], ['b', 2]]

          def result = [['a', 'b'], [1, 2], [3, 4]].transpose()
          assert result == [['a', 1, 3], ['b', 2, 4]]

      Returns:
        a List of the transposed lists
      Since:
        1.5.0
      See Also:
        GroovyCollections#transpose(java.util.List)

    - #### public List withDefault(Closure init)

      An alias for `withLazyDefault` which decorates a list allowing it to grow when called with index values outside the normal list bounds.

      Parameters:
        `init` - a Closure with the target index as parameter which generates the default value
      Returns:
        the decorated List
      Since:
        1.8.7
      See Also:
        List#withLazyDefault(groovy.lang.Closure)
        List#withEagerDefault(groovy.lang.Closure)

    - #### public List withEagerDefault(Closure init)

      Decorates a list allowing it to grow when called with a non-existent index value. When called with such values, the list is grown in size and a default value is placed in the list by calling a supplied `init` Closure. Null values can be stored in the list.

      How it works: The decorated list intercepts all calls to `getAt(index)` and `get(index)`. If an index greater than or equal to the current `size()` is used, the list will grow automatically up to the specified index. Gaps will be filled by calling the `init` Closure. If generating a default value is a costly operation consider using `withLazyDefault`.

      Example usage:

          def list = [0, 1].withEagerDefault{ 42 }
          assert list[0] == 0
          assert list[1] == 1
          assert list[3] == 42   // default value
          assert list == [0, 1, 42, 42]   // gap filled with default value

          // illustrate using the index when generating default values
          def list2 = [5].withEagerDefault{ index -> index * index }
          assert list2[3] == 9
          assert list2 == [5, 1, 4, 9]

          // illustrate what happens with null values
          list2[2] = null
          assert list2[2] == null
          assert list2 == [5, 1, null, 9]

      Parameters:
        `init` - a Closure with the target index as parameter which generates the default value
      Returns:
        the wrapped List
      Since:
        1.8.7

    - #### public List withLazyDefault(Closure init)

      Decorates a list allowing it to grow when called with a non-existent index value. When called with such values, the list is grown in size and a default value is placed in the list by calling a supplied `init` Closure. Subsequent retrieval operations if finding a null value in the list assume it was set as null from an earlier growing operation and again call the `init` Closure to populate the retrieved value; consequently the list can't be used to store null values.

      How it works: The decorated list intercepts all calls to `getAt(index)` and `get(index)`. If an index greater than or equal to the current `size()` is used, the list will grow automatically up to the specified index. Gaps will be filled by `null`. If a default value should also be used to fill gaps instead of `null`, use `withEagerDefault`. If `getAt(index)` or `get(index)` are called and a null value is found, it is assumed that the null value was a consequence of an earlier grow list operation and the `init` Closure is called to populate the value.

      Example usage:

          def list = [0, 1].withLazyDefault{ 42 }
          assert list[0] == 0
          assert list[1] == 1
          assert list[3] == 42   // default value
          assert list == [0, 1, null, 42] // gap filled with null

          // illustrate using the index when generating default values
          def list2 = [5].withLazyDefault{ index -> index * index }
          assert list2[3] == 9
          assert list2 == [5, null, null, 9]
          assert list2[2] == 4
          assert list2 == [5, null, 4, 9]

          // illustrate what happens with null values
          list2[2] = null
          assert list2[2] == 4

      Parameters:
        `init` - a Closure with the target index as parameter which generates the default value
      Returns:
        the decorated List
      Since:
        1.8.7