Список в список списков в Scala - PullRequest
0 голосов
/ 01 мая 2020

Я учусь Scala, и эта идея неизменности все еще сбивает с толку, поэтому, если вопрос кажется очевидным, просто укажите мне правильное направление, пожалуйста

, если у меня есть Список объектов с id, groupId и имя

List(
Obj(1, 1, "1.1")
Obj(2, 1, "1.2")
Obj(3, 1, "1.3")
Obj(1, 2, "2.1")
Obj(2, 2, "2.2")
Obj(1, 3, "3.1")

как правильно создать что-то подобное в Scala. (Элементы не обязательно заказываются groupId)

List(
    List(
        Obj(1, 1, "1.1")
        Obj(2, 1, "1.2")
        Obj(3, 1, "1.3")
    ), List(
        Obj(1, 2, "2.1")
        Obj(2, 2, "2.2")
    ), List(
        Obj(1, 3, "3.1")
    )
)

Должен ли я использовать for или map или есть какие-то другие подходы?

1 Ответ

2 голосов
/ 02 мая 2020

Scala неизменные коллекции обеспечивают функции более высокого порядка , такие как map, foldLeft, groupBy, et c., Которые производят новая трансформированная коллекция без изменения старой коллекции. Например, рассмотрим groupBy, за которым следует values

objs             // List[Obj]
  .groupBy(_.y)  // Map[Int,List[Obj]]
  .values        // Iterable[List[Obj]]

с учетом

case class Obj(x: Int, y: Int, s: String)

val objs =
  List(
    Obj(1, 1, "1.1"),
    Obj(2, 1, "1.2"),
    Obj(3, 1, "1.3"),
    Obj(1, 2, "2.1"),
    Obj(2, 2, "2.2"),
    Obj(1, 3, "3.1"),
  )

, который выдает

Iterable(
  List(Obj(1,1,1.1), Obj(2,1,1.2), Obj(3,1,1.3)), 
  List(Obj(1,2,2.1), Obj(2,2,2.2)), 
  List(Obj(1,3,3.1))
)

Подумайте о прохождении через List интерактивных упражнений и запросите на Scala канале Gitter о дружественном руководстве для начинающих в реальном времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...