Ответ 1
Вы можете использовать zip
:
val ms: List[Message] = ???
val as: List[Author] = ???
var sms = for ( (m, a) <- (ms zip as)) yield new SmartMessage(m, a)
Если вам не нравится for-comprehensions
, вы можете использовать map
:
var sms = (ms zip as).map{ case (m, a) => new SmartMessage(m, a)}
Метод zip
создает коллекцию пар. В этом случае List[(Message, Author)]
.
Вы также можете использовать метод zipped
на Tuple2
(и на Tuple3
):
var sms = (ms, as).zipped.map{ (m, a) => new SmartMessage(m, a)}
Как вы можете видеть, в этом случае вам не требуется сопоставление шаблонов в map
.
Extra
List
является Seq
, а Seq
сохраняет порядок. См. scala обзор коллекций.
Существует 3 основных раздела коллекций: Seq, Set и Map.
- Seq сохраняет порядок элементов.
- Set не содержит повторяющихся элементов.
- Map содержит сопоставления от ключей к значениям.
List
в scala является связанным списком, поэтому вы должны добавлять к нему элементы, а не добавлять. См. Характеристики производительности коллекций scala.