scalabeginner

List Operations Basics

Essential list operations: head, tail, cons, zip, groupBy, sliding, partition, and span.

scala
@main def run(): Unit =
  val nums = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

  // Basic access
  println(s"Head: ${nums.head}")
  println(s"Tail: ${nums.tail}")
  println(s"Last: ${nums.last}")
  println(s"Init: ${nums.init}")
  println(s"Take 3: ${nums.take(3)}")
  println(s"Drop 3: ${nums.drop(3)}")

  // Cons (prepend)
  val withZero = 0 :: nums
  println(s"Cons: $withZero")

  // Concat
  val combined = List(1, 2) ::: List(3, 4)
  println(s"Concat: $combined")

  // Partition and span
  val (evens, odds) = nums.partition(_ % 2 == 0)
  println(s"\nEvens: $evens")
  println(s"Odds: $odds")

  val (prefix, rest) = nums.span(_ < 5)
  println(s"Prefix (<5): $prefix")
  println(s"Rest: $rest")

  val (first3, remaining) = nums.splitAt(3)
  println(s"First 3: $first3, Remaining: $remaining")

  // Grouping
  val words = List("apple", "avocado", "banana", "blueberry", "cherry")
  val byFirstLetter = words.groupBy(_.head)
  println(s"\nGrouped: $byFirstLetter")

  val grouped = nums.grouped(3).toList
  println(s"Groups of 3: $grouped")

  // Sliding window
  val windows = nums.sliding(3).toList
  println(s"Sliding(3): $windows")

  val windowStep = nums.sliding(3, 2).toList
  println(s"Sliding(3, step=2): $windowStep")

  // Zip
  val names = List("Alice", "Bob", "Carol")
  val ages = List(30, 25, 35)
  val zipped = names.zip(ages)
  println(s"\nZipped: $zipped")

  val indexed = names.zipWithIndex
  println(s"Indexed: $indexed")

  val (unzipNames, unzipAges) = zipped.unzip
  println(s"Unzipped: $unzipNames, $unzipAges")

  // Flattening
  val nested = List(List(1, 2), List(3, 4), List(5))
  println(s"\nFlatten: ${nested.flatten}")
  println(s"FlatMap: ${nested.flatMap(_.map(_ * 10))}")

  // Distinct, sorted, reversed
  val dupes = List(3, 1, 4, 1, 5, 9, 2, 6, 5, 3)
  println(s"\nDistinct: ${dupes.distinct}")
  println(s"Sorted: ${dupes.sorted}")
  println(s"Reversed: ${dupes.reverse}")
  println(s"SortBy: ${words.sortBy(_.length)}")

  // Aggregations
  println(s"\nMin: ${nums.min}, Max: ${nums.max}")
  println(s"Sum: ${nums.sum}, Product: ${nums.product}")
  println(s"Count(>5): ${nums.count(_ > 5)}")
  println(s"Exists(>5): ${nums.exists(_ > 5)}")
  println(s"ForAll(>0): ${nums.forall(_ > 0)}")

  // Reduce and fold
  println(s"Reduce(+): ${nums.reduce(_ + _)}")
  println(s"FoldLeft: ${nums.foldLeft("")((acc, n) => acc + n.toString)}")
  println(s"Scan: ${nums.take(5).scanLeft(0)(_ + _)}")

Use Cases

  • Data processing and transformation
  • Collection manipulation
  • Functional programming basics

Tags

Related Snippets

Similar patterns you can reuse in the same workflow.