Руководство по Scala. Коллекции. Списки.

В данной статье мы рассмотрим списки в языке программирования Scala.

Список – это структура данных, которая содержит однотипные элементы, которые имеет ссылки на предыдущий и на следующий элемент. Важный момент – списки в Scala являются immutable.

Создание списка имеет следующую общую форму записи:


var ИМЯ_ПЕРЕМЕННОЙ: List[ТИП_ДАННЫХ] = List (ОБЪЕКТ_1, ОБЪЕКТ_2); 

Для понимания того как это работает на практике, рассмотрим простой пример:


package net.proselyte.scalatutorial.collections

/**
  * Scala class that demonstrates Lists in Scala.
  *
  * @author Eugene Suleimanov
  */

object ListDemo {
  def main(args: Array[String]) {
    val skills: List[String] = List("Java", "Scala", "SQL", "NoSQL", "Hibernate");

    val salaries: List[Int] = List(10, 20, 30, 40, 50);

    println("skills:" + skills);
    println("salaries: " + salaries);
  }
}

В результате выполнения данной программы мы получим следующий вывод в консоль:


skills:List(Java, Scala, SQL, NoSQL, Hibernate)
salaries: List(10, 20, 30, 40, 50)

Process finished with exit code 0

Данная программа может быть записана следующим образом:


package net.proselyte.scalatutorial.collections

/**
  * Scala class that demonstrates cons in Scala.
  *
  * @author Eugene Suleimanov
  */

object ListConsDemo {
  def main(args: Array[String]) {

    val skills = "Java" :: ("Scala" :: ("SQL" :: ("NoSQL" :: ("Hibernate" :: Nil))));

    val salaries = 10 :: (20 :: (30 :: (40 :: (50 :: Nil))));

    println("skills:" + skills);
    println("salaries: " + salaries);
  }
}

Вывод в консоль будет аналогичен предыдущему варианту:


skills:List(Java, Scala, SQL, NoSQL, Hibernate)
salaries: List(10, 20, 30, 40, 50)

Process finished with exit code 0

Кроме того, в Scala мы можем создавать многомерные списки:


package net.proselyte.scalatutorial.collections

/**
  * Scala class that demonstrates 2-dimensional list on Scala.
  *
  * @author Eugene Suleimanov
  */

object TwoDimensionalListDemo {
  def main(args: Array[String]) {
    val twoDimensionalList: List[List[String]] =
      List(
        List("A", "B", "C"),
        List("D", "E", "F")
      );

    println("twoDimensionalList:");
    println(twoDimensionalList);
  }
}

Данная программа имеет следующий результат работы:


twoDimensionalList:
List(List(A, B, C), List(D, E, F))

Process finished with exit code 0

В Scala предусмотрена возможность создания списков для типа Nothing. Рассмотрим, как это выглядит на практике:


package net.proselyte.scalatutorial.collections

/**
  * Scala class that demonstrates List of Nothing.
  *
  * @author Eugene Suleimanov
  */

object NothingListDemo {
  def main(args: Array[String]) {
    val nothingList:List[Nothing] = List();

    println("nothingList: " + nothingList);
  }
}

В результате выполнения данной программы мы получим следующий результат:


nothingList: List()

Process finished with exit code 0

Рассмотрим некоторые базовые операции со списками:


package net.proselyte.scalatutorial.collections

/**
  * Scala class that demonstrates basic List operations.
  *
  * @author Eugene Suleimanov
  */

object ListBasicOperationsDemo {
  def main(args: Array[String]) {
    val list1 = 1 :: (2 :: (3 :: Nil));
    val list2 = 4 :: (5 :: (6 :: Nil));

    println("list1: " + list1);
    println("list2: " + list2);

    val commonList = List.concat(list1, list2);
    println("commonList" + commonList);

    println("Reversed commonList: " + commonList.reverse);
  }
}

Результатом выполнения данной программы будет следующий вывод в консоль:


list1: List(1, 2, 3)
list2: List(4, 5, 6)
commonListList(1, 2, 3, 4, 5, 6)
Reversed commonList: List(6, 5, 4, 3, 2, 1)

Process finished with exit code 0

На этом мы заканчиваем обзор списков в Scala.