# Grouping method examples for Scala Vector and Seq

This page shows a few examples of “grouping” methods that can be used on the Scala Vector. Note that these same methods will also work with a Scala Seq, including IndexedSeq.

## Grouping methods

Method Returns
groupBy(f) A map of collections created by the function f
grouped Breaks the vector into fixed-size iterable collections
partition(p) Two collections created by the predicate p
sliding(i,s) Group elements into fixed size blocks by passing a sliding window of size i and step s over them
span(p) A collection of two collections; the first created by vector.takeWhile(p), and the second created by vector.dropWhile(p)
splitAt(i) A collection of two collections by splitting the vector at index i
unzip The opposite of zip, breaks a collection into two collections by dividing each element into two pieces; such as breaking up a vector of Tuple2 elements

### Examples

val firstTen = (1 to 10).toVector      # Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

firstTen.groupBy(_ > 5)                # Map(false -> Vector(1, 2, 3, 4, 5), true -> Vector(6, 7, 8, 9, 10))
firstTen.grouped(2)                    # Iterator[Vector[Int]] = non-empty iterator
firstTen.grouped(2).toVector           # Vector(Vector(1, 2), Vector(3, 4), Vector(5, 6), Vector(7, 8), Vector(9, 10))
firstTen.grouped(5).toVector           # Vector(Vector(1, 2, 3, 4, 5), Vector(6, 7, 8, 9, 10))

"foo bar baz".partition(_ < 'c')       # (" ba ba", foorz)  // a Tuple2
firstTen.partition(_ > 5)              # (Vector(6, 7, 8, 9, 10), Vector(1, 2, 3, 4, 5))

firstTen.sliding(2)                    # Iterator[Vector[Int]] = non-empty iterator
firstTen.sliding(2).toVector           # Vector(Vector(1, 2), Vector(2, 3), Vector(3, 4), Vector(4, 5), Vector(5, 6), Vector(6, 7), Vector(7, 8), Vector(8, 9), Vector(9, 10))
firstTen.sliding(2,2).toVector         # Vector(Vector(1, 2), Vector(3, 4), Vector(5, 6), Vector(7, 8), Vector(9, 10))
firstTen.sliding(2,3).toVector         # Vector(Vector(1, 2), Vector(4, 5), Vector(7, 8), Vector(10))
firstTen.sliding(2,4).toVector         # Vector(Vector(1, 2), Vector(5, 6), Vector(9, 10))

val x = Vector(15, 10, 5, 8, 20, 12)
x.groupBy(_ > 10)                      # Map(false -> Vector(10, 5, 8), true -> Vector(15, 20, 12))
x.partition(_ > 10)                    # (Vector(15, 20, 12), Vector(10, 5, 8))
x.span(_ < 20)                         # (Vector(15, 10, 5, 8), Vector(20, 12))
x.splitAt(2)                           # (Vector(15, 10), Vector(5, 8, 20, 12))