gpt4 book ai didi

Scala 将元组向量映射到对象向量

转载 作者:行者123 更新时间:2023-12-04 13:48:30 25 4
gpt4 key购买 nike

import scala.concurrent.duration._
import scala.language.implicitConversions
import scala.concurrent.{Future, Await}
import scala.concurrent.ExecutionContext.Implicits.global

object test extends App {
case class Person(name: String, age: Int)

implicit def t2p(t: (String, Int)) : Person = Person(t._1, t._2)

val f:Future[Vector[(String, Int)]] = Future {
Vector(("One", 1), ("Two", 2))
}

val s = f.mapTo[Vector[Person]]

Await.result(s.map { _ foreach { x => println(x)}}, 5.seconds)
}

我正在尝试将元组的 Vector 转换为 Vector[Person],但即使存在隐式元组到 Person 的转换函数,上述代码也会导致转换异常?

线程“main”中的异常 java.lang.ClassCastException: scala.Tuple2 无法转换为 example.test$Person 在 example.test$$anonfun$2$$anonfun$apply$1.apply(test.scala:19) 在 scala.collection.Iterator$class.foreach(Ite​​rator.scala:727) 在 scala.collection.AbstractIterator.foreach(Ite​​rator.scala:1157) 在 scala.collection.IterableLike$class.foreach(Ite​​rableLike.scala:72) 在 scala.collection.AbstractIterable.foreach(Ite​​rable.scala:54) 在 example.test$$anonfun$2.apply(test.scala:19) 在 example.test$$anonfun$2.apply(test.scala:19)

谢谢。

最佳答案

mapTo 只是尝试转换,所以当然尝试将 Vector[(String, Int)] 转换为 Vector[Person] 是会失败。

您需要一个将 (String, Int) 转换为 Person 的函数,该函数是 Person.apply 的元组版本>.

因此,替换

f.mapTo[Vector[Person]]

f.map(_.map(Person.tupled))

关于Scala 将元组向量映射到对象向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31036844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com