如何在 Scala 中将对象从 Vector 添加到 ListBuffer?
How to Add Objects from Vector to ListBuffer in Scala?
我无法在控制台上打印 newPStat 列表的元素,在进行以下简单转换后,
它该死的简单,但我仍然遗漏了一些非常重要的东西。
...
val newPStat = List[PSObject]()
S1ServiceObject.getPS.onComplete({
case Success(pSList) => {
logger.info("Number of Ps - " + pSList.size)
pSList.foreach{
pfS => {
newPStat ++ List(new PSObject(pfS.pfNameRemote, pfS.impRemote,
pfS.actCRemote, pfS.actARemote) )
println("prx Size "+newPStat.size)
}
}
}
case Failure(exception) => {
logger.error("Error while trying to get PS - " + exception.getMessage)
}
})
case class PSObject(pfName: String, imp : BigDecimal, actC: Int, actA: Int)
// printing the object's elements
newPStat.foreach{x => println("prax: "+x.toString)}
正如您在上面看到的函数调用
下面是Function,这是一个Service层的Func。 Returns 未来[矢量[]]
def getPS: Future[Vector[PSObjectDTO]]= {
getPSData
}
您实际上并没有更改 newPStat
列表。这一行实际上什么都不做:
newPStat ++ List(new PSObject(pfS.pfNameRemote, pfS.impRemote, pfS.actCRemote, pfS.actARemote) )
您正在创建一个新列表,但从未将其分配给任何内容,如以下 REPL 示例所示:
scala> val a = List(1,2,3)
a: List[Int] = List(1, 2, 3)
scala> a ++ List(4)
res9: List[Int] = List(1, 2, 3, 4)
scala> a
res10: List[Int] = List(1, 2, 3)
因此您需要将 newPStat
从 val
更改为 var
并将其重新分配给新列表:
newPStat = newPStat ++ List(new PSObject(pfS.pfNameRemote, pfS.impRemote, pfS.actCRemote, pfS.actARemote) )
此外,由于您正在动态构建列表,我建议改为 ArrayBuffer
:
scala> val a = collection.mutable.ArrayBuffer.empty[Int]
a: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()
scala> a.append(1)
scala> a.append(2)
scala> a.toArray
res13: Array[Int] = Array(1, 2)
更惯用的方法是使用 map
而不是 foreach
:
newPStat = pSList.map{pfS => new PSObject(pfS.pfNameRemote, pfS.impRemote, pfS.actCRemote, pfS.actARemote)}.toList
我无法在控制台上打印 newPStat 列表的元素,在进行以下简单转换后, 它该死的简单,但我仍然遗漏了一些非常重要的东西。
...
val newPStat = List[PSObject]()
S1ServiceObject.getPS.onComplete({
case Success(pSList) => {
logger.info("Number of Ps - " + pSList.size)
pSList.foreach{
pfS => {
newPStat ++ List(new PSObject(pfS.pfNameRemote, pfS.impRemote,
pfS.actCRemote, pfS.actARemote) )
println("prx Size "+newPStat.size)
}
}
}
case Failure(exception) => {
logger.error("Error while trying to get PS - " + exception.getMessage)
}
})
case class PSObject(pfName: String, imp : BigDecimal, actC: Int, actA: Int)
// printing the object's elements
newPStat.foreach{x => println("prax: "+x.toString)}
正如您在上面看到的函数调用
下面是Function,这是一个Service层的Func。 Returns 未来[矢量[]]
def getPS: Future[Vector[PSObjectDTO]]= {
getPSData
}
您实际上并没有更改 newPStat
列表。这一行实际上什么都不做:
newPStat ++ List(new PSObject(pfS.pfNameRemote, pfS.impRemote, pfS.actCRemote, pfS.actARemote) )
您正在创建一个新列表,但从未将其分配给任何内容,如以下 REPL 示例所示:
scala> val a = List(1,2,3)
a: List[Int] = List(1, 2, 3)
scala> a ++ List(4)
res9: List[Int] = List(1, 2, 3, 4)
scala> a
res10: List[Int] = List(1, 2, 3)
因此您需要将 newPStat
从 val
更改为 var
并将其重新分配给新列表:
newPStat = newPStat ++ List(new PSObject(pfS.pfNameRemote, pfS.impRemote, pfS.actCRemote, pfS.actARemote) )
此外,由于您正在动态构建列表,我建议改为 ArrayBuffer
:
scala> val a = collection.mutable.ArrayBuffer.empty[Int]
a: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()
scala> a.append(1)
scala> a.append(2)
scala> a.toArray
res13: Array[Int] = Array(1, 2)
更惯用的方法是使用 map
而不是 foreach
:
newPStat = pSList.map{pfS => new PSObject(pfS.pfNameRemote, pfS.impRemote, pfS.actCRemote, pfS.actARemote)}.toList