You could use zip
:
val ms: List[Message] = ???
val as: List[Author] = ???
var sms = for ( (m, a) <- (ms zip as)) yield new SmartMessage(m, a)
If you don't like for-comprehensions
you could use map
:
var sms = (ms zip as).map{ case (m, a) => new SmartMessage(m, a)}
Method zip
creates collection of pairs. In this case List[(Message, Author)]
.
You could also use zipped
method on Tuple2
(and on Tuple3
):
var sms = (ms, as).zipped.map{ (m, a) => new SmartMessage(m, a)}
As you can see you don't need pattern matching in map
in this case.
Extra
List
is Seq
and Seq
preserves order. See scala collections overview.
There are 3 main branches of collections: Seq, Set and Map.
- Seq preserves order of elements.
- Set contains no duplicate elements.
- Map contains mappings from keys to values.
List
in scala is linked list, so you should prepend elements to it, not append. See Performance Characteristics of scala collections.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…