0Pricing
Scala for Backend Engineering & Functional Programming · Урок

Преобразования

map, filter, flatMap

«Преобразования» — бесплатный урок Scala for Backend Engineering & Functional Programming на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Scala for Backend Engineering & Functional Programming, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.

Части этого урока еще не переведены и отображаются на английском.

Transforming collections

Scala collections are immutable by default. Instead of mutating them, you transform them into new collections using methods like map, filter, and flatMap.

object Main {
  def main(args: Array[String]): Unit = {
    val nums = List(1, 2, 3, 4)
    val doubled = nums.map(_ * 2)
    println(nums)
    println(doubled)
  }
}

map: transform every element

map applies a function to each element and returns a new collection of the same size. The element type may change.

object Main {
  def main(args: Array[String]): Unit = {
    val words = List("scala", "rocks")
    val lengths = words.map(_.length)
    println(lengths)
  }
}

The underscore shorthand

The underscore _ is shorthand for a single function parameter. _ * 2 means x => x * 2. It keeps simple transformations compact.

object Main {
  def main(args: Array[String]): Unit = {
    val nums = List(10, 20, 30)
    println(nums.map(_ + 1))
    println(nums.map(x => x + 1))
  }
}

filter: keep matching elements

filter keeps only the elements for which the predicate returns true. The result may be smaller than the original.

object Main {
  def main(args: Array[String]): Unit = {
    val nums = (1 to 10).toList
    val evens = nums.filter(_ % 2 == 0)
    println(evens)
  }
}

filterNot: the opposite

filterNot keeps elements where the predicate is false. It is the complement of filter.

object Main {
  def main(args: Array[String]): Unit = {
    val nums = List(1, 2, 3, 4, 5)
    println(nums.filterNot(_ % 2 == 0))
  }
}

flatMap: map then flatten

flatMap applies a function that returns a collection for each element, then flattens the results into one collection.

object Main {
  def main(args: Array[String]): Unit = {
    val words = List("ab", "cd")
    val chars = words.flatMap(_.toList)
    println(chars)
  }
}

map vs flatMap

If your function returns a collection, map gives you nested collections while flatMap gives you a flat one. Choose based on the shape you want.

object Main {
  def main(args: Array[String]): Unit = {
    val nums = List(1, 2, 3)
    println(nums.map(n => List(n, n)))
    println(nums.flatMap(n => List(n, n)))
  }
}

flatMap with Option

flatMap over a list of Option drops the None values and unwraps the Some values, a handy way to filter and transform at once.

object Main {
  def main(args: Array[String]): Unit = {
    val raw = List("1", "x", "3", "y")
    val parsed = raw.flatMap(_.toIntOption)
    println(parsed)
  }
}

collect: filter and map together

collect takes a partial function: it keeps and transforms only the elements the function is defined for, combining filter and map in one pass.

object Main {
  def main(args: Array[String]): Unit = {
    val mixed: List[Any] = List(1, "two", 3, "four", 5)
    val ints = mixed.collect { case i: Int => i * 10 }
    println(ints)
  }
}

Chaining transformations

Because each method returns a new collection, you can chain them into a readable pipeline. Each step transforms the output of the previous one.

object Main {
  def main(args: Array[String]): Unit = {
    val result = List(1, 2, 3, 4)
      .map(_ + 1)
      .filter(_ % 2 == 0)
    println(result)
  }
}

A clean pipeline

Here is a tidy transformation pipeline: filter even numbers, square them, then keep the large ones. Pipelines read like a description of the data flow.

object Main {
  def main(args: Array[String]): Unit = {
    val result = (1 to 10).toList
      .filter(_ % 2 == 0)
      .map(x => x * x)
      .filter(_ > 10)
    println(result)
  }
}

Quick Check

What does List("ab", "cd").flatMap(_.toList) return?

Recap

You learned the core transformations:

  • map — transform each element, same size
  • filter / filterNot — keep or drop by predicate
  • flatMap — map then flatten nested results
  • collect — filter and map with a partial function
  • Chain them into readable, immutable pipelines

Часто задаваемые вопросы

Урок «Преобразования» бесплатный?

Да — полный текст урока «Преобразования» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Scala for Backend Engineering & Functional Programming, подпишись на CoddyKit PRO. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.

Чему я научусь в уроке «Преобразования»?

map, filter, flatMap Ты практикуешь Scala for Backend Engineering & Functional Programming с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Scala for Backend Engineering & Functional Programming?

Предыдущий опыт не требуется. Scala for Backend Engineering & Functional Programming на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Преобразования»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Scala for Backend Engineering & Functional Programming?

Да. Каждый урок Scala for Backend Engineering & Functional Programming включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. List, Vector, Set, Map
  2. Преобразования
  3. Свёртка и редукция
  4. Группировка и сортировка
← Назад к Scala for Backend Engineering & Functional Programming