将 X 的序列转换为 Y 的序列的最有效方法是什么
What is the most efficient way to transform of seq of X to a seq of Y
我有一个 Seq
个像 Seq(x1, x2, x3, x4)
这样的对象,我想将它转换为 Seq(y1, y2, y3, y4)
最有效的方法是什么
现在的我
val seq1 = Seq(x1, x2, x3......)
var seq2 = Seq[MyType2]()
for (myObj <- seq1) {
seq2 = seq2 :+ myObj.tranformToType2
}
问题是 scala 文档说
https://www.scala-lang.org/api/2.12.x/scala/collection/Seq.html
a new sequence consisting of all elements of this sequence followed by elem.
所以我想知道将一个对象列表转换为另一个对象列表的最idiomatic/efficient方法是什么
您编写的代码是 Scala 命令式风格,但 Scala 旨在成为一种函数式语言。
功能方法是:
val seq2 = seq1.map(myObj => myObj.tranformToType2)
// Or shorter:
val seq2 = seq1.map(_.tranformToType2)
map
是函数编程中最有用的操作之一。您会发现,当您需要将某些东西转换成其他东西时,您会在任何地方使用它。
根据经验,每当您看到 var
和 for
循环时,这很臭,您应该问问自己 我如何以功能方式执行此操作?
map
是您要查找的函数。查看 docs 了解详情。
一个简单的例子:
case class MyType1(x: String)
case class MyType2(x: Int)
val ls: Seq[MyType2] = Seq(MyType1("hello"), MyType1("world")).map(mt1 => MyType2(mt1.content.length))
我有一个 Seq
个像 Seq(x1, x2, x3, x4)
这样的对象,我想将它转换为 Seq(y1, y2, y3, y4)
最有效的方法是什么
现在的我
val seq1 = Seq(x1, x2, x3......)
var seq2 = Seq[MyType2]()
for (myObj <- seq1) {
seq2 = seq2 :+ myObj.tranformToType2
}
问题是 scala 文档说
https://www.scala-lang.org/api/2.12.x/scala/collection/Seq.html
a new sequence consisting of all elements of this sequence followed by elem.
所以我想知道将一个对象列表转换为另一个对象列表的最idiomatic/efficient方法是什么
您编写的代码是 Scala 命令式风格,但 Scala 旨在成为一种函数式语言。
功能方法是:
val seq2 = seq1.map(myObj => myObj.tranformToType2)
// Or shorter:
val seq2 = seq1.map(_.tranformToType2)
map
是函数编程中最有用的操作之一。您会发现,当您需要将某些东西转换成其他东西时,您会在任何地方使用它。
根据经验,每当您看到 var
和 for
循环时,这很臭,您应该问问自己 我如何以功能方式执行此操作?
map
是您要查找的函数。查看 docs 了解详情。
一个简单的例子:
case class MyType1(x: String)
case class MyType2(x: Int)
val ls: Seq[MyType2] = Seq(MyType1("hello"), MyType1("world")).map(mt1 => MyType2(mt1.content.length))