scala
class List

[source: `scala/List.scala`]

`sealed abstract` `class` List[+a]
  `extends` Seq[a]

  A class representing an ordered collection of elements of type `a`. This class comes with two implementing case classes `scala.Nil` and `scala.::` that implement the abstract members `isEmpty`, `head` and `tail`.

Author
  Martin Odersky and others
Version
  1.0, 16/07/2003

Direct Known Subclasses:
  Nil, ::

Method Summary
`def` | :: [b >: a](x : b) : List[b] Add an element `x` at the beginning of this list.
`def` | ::: [b >: a](prefix : List[b]) : List[b] Returns a list resulting from the concatenation of the given list `prefix` and this list.
`def` | apply (n : Int) : a Returns the `n`-th element of this list. The first element (head of the list) is at position 0.
`def` | break (p : (a) => Boolean) : (List[a], List[a]) Like `span` but with the predicate inverted.
`def` | count (p : (a) => Boolean) : Int Count the number of elements in the list which satisfy a predicate.
`def` | diff [b >: a](that : List[b]) : List[b] Computes the difference between this list and the given list `that`.
`override def` | drop (n : Int) : List[a] Returns the list without its `n` first elements. If this list has less than `n` elements, the empty list is returned.
`def` | dropRight (n : Int) : List[a] Returns the list wihout its rightmost `n` elements.
`override def` | dropWhile (p : (a) => Boolean) : List[a] Returns the longest suffix of this list whose first element does not satisfy the predicate `p`.
`def` | elements : Iterator[a] Returns the elements in the list as an iterator
`override def` | exists (p : (a) => Boolean) : Boolean Tests the existence in this list of an element that satisfies the predicate `p`.
`override final def` | filter (p : (a) => Boolean) : List[a] Returns all the elements of this list that satisfy the predicate `p`. The order of the elements is preserved.
`override def` | find (p : (a) => Boolean) : Option[a] Find and return the first element of the list satisfying a predicate, if any.
`override final def` | flatMap [b](f : (a) => Iterable[b]) : List[b] Applies the given function `f` to each element of this list, then concatenates the results.
`override def` | foldLeft [b](z : b)(f : (b, a) => b) : b Combines the elements of this list together using the binary function `f`, from left to right, and starting with the value `z`.
`override def` | foldRight [b](z : b)(f : (a, b) => b) : b Combines the elements of this list together using the binary function `f`, from right to left, and starting with the value `z`.
`override def` | forall (p : (a) => Boolean) : Boolean Tests if the predicate `p` is satisfied by all elements in this list.
`override final def` | foreach (f : (a) => Unit) : Unit Apply the given function `f` to each element of this list (while respecting the order of the elements).
`abstract def` | head : a Returns this first element of the list.
`def` | indices : List[Int] Creates a list with all indices in the list. This is equivalent to a call to `List.range(0, xs.length)`.
`def` | init : List[a] Returns the list without its last element.
`def` | intersect [b >: a](that : List[b]) : List[b] Computes the intersection between this list and the given list `that`.
`override abstract def` | isEmpty : Boolean Returns true if the list does not contain any elements.
`def` | last : a Returns the last element of this list.
`def` | length : Int Returns the number of elements in the list.
`override final def` | map [b](f : (a) => b) : List[b] Returns the list resulting from applying the given function `f` to each element of this list.
`def` | partition (p : (a) => Boolean) : (List[a], List[a]) Partition the list in two sub-lists according to a predicate.
`override def` | reduceLeft [b >: a](f : (b, b) => b) : b Combines the elements of this list together using the binary operator `op`, from left to right
`override def` | reduceRight [b >: a](f : (b, b) => b) : b Combines the elements of this list together using the binary operator `op`, from right to left
`def` | remove (p : (a) => Boolean) : List[a] Removes all elements of the list which satisfy the predicate `p`. This is like `filter` with the predicate inversed.
`def` | removeDuplicates : List[a] Removes redundant elements from the list. Uses the method `==` to decide if two elements are identical.
`override def` | reverse : List[a] A list consisting of all elements of this list in reverse order.
`def` | reverseMap [b](f : (a) => b) : List[b] Apply a function to all the elements of the list, and return the reversed list of results. This is equivalent to a call to `map` followed by a call to `reverse`, but more efficient.
`def` | reverse_::: [b >: a](prefix : List[b]) : List[b] Reverse the given prefix and append the current list to that. This function is equivalent to an application of `reverse` on the prefix followed by a call to `:::`, but more efficient (and tail recursive).
`def` | sort (lt : (a, a) => Boolean) : List[a] Sort the list according to the comparison function `<(e1: a, e2: a) => Boolean`, which should be true iff `e1` is smaller than `e2`.
`def` | span (p : (a) => Boolean) : (List[a], List[a]) Returns the longest prefix of the list whose elements all satisfy the given predicate, and the rest of the list.
`def` | splitAt (n : Int) : (List[a], List[a]) Split the list at a given point and return the two parts thus created.
`protected override def` | stringPrefix : String Defines the prefix of this object's `toString` representation.
`abstract def` | tail : List[a] Returns this list without its first element.
`override def` | take (n : Int) : List[a] Returns the `n` first elements of this list, or else the whole list, if it has less than `n` elements.
`def` | takeRight (n : Int) : List[a] Returns the rightmost `n` elements from this list.
`override def` | takeWhile (p : (a) => Boolean) : List[a] Returns the longest prefix of this list whose elements satisfy the predicate `p`.
`override def` | toList : List[a] Overrides the method in Iterable for efficiency.
`def` | union [b >: a](that : List[b]) : List[b] Computes the union of this list and the given list `that`.
`def` | zip [b](that : List[b]) : List[(a, b)] Returns a list formed from this list and the specified list `that` by associating each element of the former with the element at the same position in the latter. If one of the two lists is longer than the other, its remaining elements are ignored.
`def` | zipAll [b, c >: a, d >: b](that : List[b], thisElem : c, thatElem : d) : List[(c, d)] Returns a list formed from this list and the specified list `that` by associating each element of the former with the element at the same position in the latter.
`def` | zipWithIndex : List[(a, Int)] Returns a list that pairs each element of this list with its index, counting from 0.

Methods inherited from Seq
size, concat, ++, isDefinedAt, lastIndexOf, contains, slice, subseq, toArray

Methods inherited from Collection
toString

Methods inherited from Iterable
findIndexOf, indexOf, /:, :\, copyToBuffer, sameElements, mkString, mkString, addString, addString, copyToArray, projection, hasDefiniteSize

Methods inherited from PartialFunction
orElse, andThen

Methods inherited from Function1
compose

Methods inherited from AnyRef
getClass, hashCode, equals, clone, notify, notifyAll, wait, wait, wait, finalize, ==, !=, eq, ne, synchronized

Methods inherited from Any
==, !=, isInstanceOf, asInstanceOf

Method Details

`override abstract` `def` isEmpty : Boolean

  Returns true if the list does not contain any elements.

Returns
  `true`, iff the list is empty.

Overrides
  Seq.isEmpty

`abstract` `def` head : a

  Returns this first element of the list.

Returns
  the first element of this list.
Throws
  Predef.NoSuchElementException - if the list is empty.

`abstract` `def` tail : List[a]

  Returns this list without its first element.

Returns
  this list without its first element.
Throws
  Predef.NoSuchElementException - if the list is empty.

`` `def` ::[b >: a](x : b) : List[b]

  Add an element `x` at the beginning of this list.

Parameters
  `x -` the element to append.
Returns
  the list with `x` appended at the beginning.
Examples
  `1 :: List(2, 3) = List(2, 3).::(1) = List(1, 2, 3)`

`` `def` :::[b >: a](prefix : List[b]) : List[b]

  Returns a list resulting from the concatenation of the given list `prefix` and this list.

Parameters
  `prefix -` the list to concatenate at the beginning of this list.
Returns
  the concatenation of the two lists.
Examples
  `List(1, 2) ::: List(3, 4) = List(3, 4).:::(List(1, 2)) = List(1, 2, 3, 4)`

`` `def` reverse_:::[b >: a](prefix : List[b]) : List[b]

  Reverse the given prefix and append the current list to that. This function is equivalent to an application of `reverse` on the prefix followed by a call to `:::`, but more efficient (and tail recursive).

Parameters
  `prefix -` the prefix to reverse and then prepend
Returns
  the concatenation of the reversed prefix and the current list.

`` `def` length : Int

  Returns the number of elements in the list.

Returns
  the number of elements in the list.

Overrides
  Seq.length

`` `def` indices : List[Int]

  Creates a list with all indices in the list. This is equivalent to a call to `List.range(0, xs.length)`.

Returns
  a list of all indices in the list.

`` `def` elements : Iterator[a]

  Returns the elements in the list as an iterator

Returns
  an iterator on the list elements.

`override` `def` toList : List[a]

  Overrides the method in Iterable for efficiency.

Returns
  the list itself

`` `def` init : List[a]

  Returns the list without its last element.

Returns
  the list without its last element.
Throws
  Predef.UnsupportedOperationException - if the list is empty.

`` `def` last : a

  Returns the last element of this list.

Returns
  the last element of the list.
Throws
  Predef.UnsupportedOperationException - if the list is empty.

`override` `def` take(n : Int) : List[a]

  Returns the `n` first elements of this list, or else the whole list, if it has less than `n` elements.

Parameters
  `n -` the number of elements to take.
Returns
  the `n` first elements of this list.

Overrides
  Seq.take

`override` `def` drop(n : Int) : List[a]

  Returns the list without its `n` first elements. If this list has less than `n` elements, the empty list is returned.

Parameters
  `n -` the number of elements to drop.
Returns
  the list without its `n` first elements.

Overrides
  Seq.drop

`` `def` takeRight(n : Int) : List[a]

  Returns the rightmost `n` elements from this list.

Parameters
  `n -` the number of elements to take
Returns
  the suffix of length `n` of the list

`` `def` dropRight(n : Int) : List[a]

  Returns the list wihout its rightmost `n` elements.

Parameters
  `n -` the number of elements to take
Returns
  the suffix of length `n` of the list

`` `def` splitAt(n : Int) : (List[a], List[a])

  Split the list at a given point and return the two parts thus created.

Parameters
  `n -` the position at which to split
Returns
  a pair of lists composed of the first `n` elements, and the other elements.

`override` `def` takeWhile(p : (a) => Boolean) : List[a]

  Returns the longest prefix of this list whose elements satisfy the predicate `p`.

Parameters
  `p -` the test predicate.
Returns
  the longest prefix of this list whose elements satisfy the predicate `p`.

Overrides
  Seq.takeWhile

`override` `def` dropWhile(p : (a) => Boolean) : List[a]

  Returns the longest suffix of this list whose first element does not satisfy the predicate `p`.

Parameters
  `p -` the test predicate.
Returns
  the longest suffix of the list whose first element does not satisfy the predicate `p`.

Overrides
  Seq.dropWhile

`` `def` span(p : (a) => Boolean) : (List[a], List[a])

  Returns the longest prefix of the list whose elements all satisfy the given predicate, and the rest of the list.

Parameters
  `p -` the test predicate
Returns
  a pair consisting of the longest prefix of the list whose elements all satisfy `p`, and the rest of the list.

`` `def` break(p : (a) => Boolean) : (List[a], List[a])

  Like `span` but with the predicate inverted.

`` `def` apply(n : Int) : a

  Returns the `n`-th element of this list. The first element (head of the list) is at position 0.

Parameters
  `n -` index of the element to return
Returns
  the element at position `n` in this list.
Throws
  Predef.NoSuchElementException - if the list is too short.

`override final` `def` map[b](f : (a) => b) : List[b]

  Returns the list resulting from applying the given function `f` to each element of this list.

Parameters
  `f -` function to apply to each element.
Returns
  `[f(a0), ..., f(an)]` if this list is `[a0, ..., an]`.

Overrides
  Seq.map

`` `def` reverseMap[b](f : (a) => b) : List[b]

  Apply a function to all the elements of the list, and return the reversed list of results. This is equivalent to a call to `map` followed by a call to `reverse`, but more efficient.

Parameters
  `f -` the function to apply to each elements.
Returns
  the reversed list of results.

`override final` `def` foreach(f : (a) => Unit) : Unit

  Apply the given function `f` to each element of this list (while respecting the order of the elements).

Parameters
  `f -` the treatment to apply to each element.

`override final` `def` filter(p : (a) => Boolean) : List[a]

  Returns all the elements of this list that satisfy the predicate `p`. The order of the elements is preserved.

Parameters
  `p -` the predicate used to filter the list.
Returns
  the elements of this list satisfying `p`.

Overrides
  Seq.filter

`` `def` remove(p : (a) => Boolean) : List[a]

  Removes all elements of the list which satisfy the predicate `p`. This is like `filter` with the predicate inversed.

Parameters
  `p -` the predicate to use to test elements
Returns
  the list without all elements which satisfy `p`

`` `def` partition(p : (a) => Boolean) : (List[a], List[a])

  Partition the list in two sub-lists according to a predicate.

Parameters
  `p -` the predicate on which to partition
Returns
  a pair of lists: the list of all elements which satisfy `p` and the list of all elements which do not. The relative order of the elements in the sub-lists is the same as in the original list.

`` `def` sort(lt : (a, a) => Boolean) : List[a]

  Sort the list according to the comparison function `<(e1: a, e2: a) => Boolean`, which should be true iff `e1` is smaller than `e2`.

Parameters
  `lt -` the comparison function
Returns
  a list sorted according to the comparison function `<(e1: a, e2: a) => Boolean`.
Examples

            List("Steve", "Tom", "John", "Bob")
              .sort((e1, e2) => (e1 compareTo e2) < 0) =
            List("Bob", "John", "Steve", "Tom")

Notes
  The current implementation is inefficent for already sorted lists.

`` `def` count(p : (a) => Boolean) : Int

  Count the number of elements in the list which satisfy a predicate.

Parameters
  `p -` the predicate for which to count
Returns
  the number of elements satisfying the predicate `p`.

`override` `def` forall(p : (a) => Boolean) : Boolean

  Tests if the predicate `p` is satisfied by all elements in this list.

Parameters
  `p -` the test predicate.
Returns
  `true` iff all elements of this list satisfy the predicate `p`.

`override` `def` exists(p : (a) => Boolean) : Boolean

  Tests the existence in this list of an element that satisfies the predicate `p`.

Parameters
  `p -` the test predicate.
Returns
  `true` iff there exists an element in this list that satisfies the predicate `p`.

`override` `def` find(p : (a) => Boolean) : Option[a]

  Find and return the first element of the list satisfying a predicate, if any.

Parameters
  `p -` the predicate
Returns
  the first element in the list satisfying `p`, or `None` if none exists.

`override` `def` foldLeft[b](z : b)(f : (b, a) => b) : b

  Combines the elements of this list together using the binary function `f`, from left to right, and starting with the value `z`.

Returns
  `f(... (f(f(z, a0), a1) ...), an)` if the list is `[a0, a1, ..., an]`.

`override` `def` foldRight[b](z : b)(f : (a, b) => b) : b

  Combines the elements of this list together using the binary function `f`, from right to left, and starting with the value `z`.

Returns
  `f(a0, f(a1, f(..., f(an, z)...)))` if the list is `[a0, a1, ..., an]`.

`override` `def` reduceLeft[b >: a](f : (b, b) => b) : b

  Combines the elements of this list together using the binary operator `op`, from left to right

Parameters
  `op -` The operator to apply
Returns
  `op(... op(a0,a1), ..., an)` if the list has elements `a0, a1, ..., an`.
Throws
  Predef.UnsupportedOperationException - if the list is empty.

`override` `def` reduceRight[b >: a](f : (b, b) => b) : b

  Combines the elements of this list together using the binary operator `op`, from right to left

Parameters
  `op -` The operator to apply
Returns
  `a0 op (... op (an-1 op an)...)` if the list has elements `a0, a1, ..., an`.
Throws
  Predef.UnsupportedOperationException - if the list is empty.

`override final` `def` flatMap[b](f : (a) => Iterable[b]) : List[b]

  Applies the given function `f` to each element of this list, then concatenates the results.

Parameters
  `f -` the function to apply on each element.
Returns
  `f(a0) ::: ... ::: f(an)` if this list is `[a0, ..., an]`.

Overrides
  Seq.flatMap

`override` `def` reverse : List[a]

  A list consisting of all elements of this list in reverse order.

Overrides
  Seq.reverse

`` `def` zip[b](that : List[b]) : List[(a, b)]

  Returns a list formed from this list and the specified list `that` by associating each element of the former with the element at the same position in the latter. If one of the two lists is longer than the other, its remaining elements are ignored.

Returns
  `List({a0,b0}, ..., {amin(m,n),bmin(m,n)})` when `List(a0, ..., am) zip List(b0, ..., bn)` is invoked.

`` `def` zipWithIndex : List[(a, Int)]

  Returns a list that pairs each element of this list with its index, counting from 0.

Returns
  the list `List({a0,0}, {a1,1}...)` where `ai` are the elements of this list.

`` `def` zipAll[b, c >: a, d >: b](that : List[b], thisElem : c, thatElem : d) : List[(c, d)]

  Returns a list formed from this list and the specified list `that` by associating each element of the former with the element at the same position in the latter.

Parameters
  `that -` list `that` may have a different length as the self list.
  `thisElem -` element `thisElem` is used to fill up the resulting list if the self list is shorter than `that`
  `thatElem -` element `thatElem` is used to fill up the resulting list if `that` is shorter than the self list
Returns
  `List({a0,b0}, ..., {an,bn}, {elem,bn+1}, ..., {elem,bm})` when `[a0, ..., an] zip [b0, ..., bm]` is invoked where `m > n`.

`` `def` union[b >: a](that : List[b]) : List[b]

  Computes the union of this list and the given list `that`.

Parameters
  `that -` the list of elements to add to the list.
Returns
  a list without doubles containing the elements of this list and those of the given list `that`.

`` `def` diff[b >: a](that : List[b]) : List[b]

  Computes the difference between this list and the given list `that`.

Parameters
  `that -` the list of elements to remove from this list.
Returns
  this list without the elements of the given list `that`.

`` `def` intersect[b >: a](that : List[b]) : List[b]

  Computes the intersection between this list and the given list `that`.

Parameters
  `that -` the list to intersect.
Returns
  the list of elements contained both in this list and in the given list `that`.

`` `def` removeDuplicates : List[a]

  Removes redundant elements from the list. Uses the method `==` to decide if two elements are identical.

Returns
  the list without doubles.

`protected override` `def` stringPrefix : String

  Defines the prefix of this object's `toString` representation.