如何打印集合序列的内容
How to print the content of a collection sequence
我想打印集合的内容,我已经尝试使用 mkString 方法,但它仍然没有提供正确的对象内容。
我的代码:
包裹 org.template
import org.apache.predictionio.controller.LServing
class Serving
extends LServing[Query, PredictedResult] {
override
def serve(query: Query,
predictedResults: Seq[PredictedResult]): PredictedResult = {
println(predictedResults.mkString("\n"))
predictedResults.head
}
}
回复:
predictedResult([Lorg.template.ItemScore;@2fb3a837,[Lorg.template.Rule;@5cfc70a8)
PredictedResult 的定义class:
package org.template
import org.apache.predictionio.controller.EngineFactory
import org.apache.predictionio.controller.Engine
// Query most similar (top num) items to the given
case class Query(items: Set[String], num: Int) extends Serializable
case class PredictedResult(itemScores: Array[ItemScore], rules: Array[Rule]) extends Serializable
如果PredictedResult
是个案例class像这样
case class PredictedResult(value: String)
val predictedResults = List(PredictedResult("aaa"), PredictedResult("bbb"))
println(predictedResults.mkString("\n"))
然后我们得到不错的输出
PredictedResult(aaa)
PredictedResult(bbb)
但是如果它是常规的 class 像这样
class PredictedResult(value: String)
val predictedResults = List(new PredictedResult("aaa"), new PredictedResult("bbb"))
println(predictedResults.mkString("\n"))
然后我们得到
example.Hello$PredictedResult@566776ad
example.Hello$PredictedResult@6108b2d7
为了获得正常 class 的良好输出,我们需要重写它的 toString
方法,就像这样
class PredictedResult(value: String) {
override def toString: String = s"""PredictedResult($value)"""
}
现在输出
PredictedResult(aaa)
PredictedResult(bbb)
解决我们的评论
case class Rule(v: String)
case class ItemScore(v: Int)
case class PredictedResult(itemScores: Array[ItemScore], rules: Array[Rule]) {
override def toString: String =
s"""
|PredictedResult(Array(${itemScores.mkString(",")}, Array(${rules.mkString(",")}))
""".stripMargin
}
val predictedResults = List(PredictedResult(Array(ItemScore(42), ItemScore(11)), Array(Rule("rule1"), Rule("rule2"))))
println(predictedResults.mkString("\n"))
输出
PredictedResult(Array(ItemScore(42),ItemScore(11), Array(Rule(rule1),Rule(rule2)))
如果我们像这样从 Array
更改为 List
case class Rule(v: String)
case class ItemScore(v: Int)
case class PredictedResult(itemScores: List[ItemScore], rules: List[Rule])
val predictedResults = List(PredictedResult(List(ItemScore(42), ItemScore(11)), List(Rule("rule1"), Rule("rule2"))))
println(predictedResults.mkString("\n"))
然后我们得到不错的输出 out-of-the-box 而无需覆盖 toString
PredictedResult(List(ItemScore(42), ItemScore(11)),List(Rule(rule1), Rule(rule2)))
我想打印集合的内容,我已经尝试使用 mkString 方法,但它仍然没有提供正确的对象内容。
我的代码: 包裹 org.template
import org.apache.predictionio.controller.LServing
class Serving
extends LServing[Query, PredictedResult] {
override
def serve(query: Query,
predictedResults: Seq[PredictedResult]): PredictedResult = {
println(predictedResults.mkString("\n"))
predictedResults.head
}
}
回复:
predictedResult([Lorg.template.ItemScore;@2fb3a837,[Lorg.template.Rule;@5cfc70a8)
PredictedResult 的定义class:
package org.template
import org.apache.predictionio.controller.EngineFactory
import org.apache.predictionio.controller.Engine
// Query most similar (top num) items to the given
case class Query(items: Set[String], num: Int) extends Serializable
case class PredictedResult(itemScores: Array[ItemScore], rules: Array[Rule]) extends Serializable
如果PredictedResult
是个案例class像这样
case class PredictedResult(value: String)
val predictedResults = List(PredictedResult("aaa"), PredictedResult("bbb"))
println(predictedResults.mkString("\n"))
然后我们得到不错的输出
PredictedResult(aaa)
PredictedResult(bbb)
但是如果它是常规的 class 像这样
class PredictedResult(value: String)
val predictedResults = List(new PredictedResult("aaa"), new PredictedResult("bbb"))
println(predictedResults.mkString("\n"))
然后我们得到
example.Hello$PredictedResult@566776ad
example.Hello$PredictedResult@6108b2d7
为了获得正常 class 的良好输出,我们需要重写它的 toString
方法,就像这样
class PredictedResult(value: String) {
override def toString: String = s"""PredictedResult($value)"""
}
现在输出
PredictedResult(aaa)
PredictedResult(bbb)
解决我们的评论
case class Rule(v: String)
case class ItemScore(v: Int)
case class PredictedResult(itemScores: Array[ItemScore], rules: Array[Rule]) {
override def toString: String =
s"""
|PredictedResult(Array(${itemScores.mkString(",")}, Array(${rules.mkString(",")}))
""".stripMargin
}
val predictedResults = List(PredictedResult(Array(ItemScore(42), ItemScore(11)), Array(Rule("rule1"), Rule("rule2"))))
println(predictedResults.mkString("\n"))
输出
PredictedResult(Array(ItemScore(42),ItemScore(11), Array(Rule(rule1),Rule(rule2)))
如果我们像这样从 Array
更改为 List
case class Rule(v: String)
case class ItemScore(v: Int)
case class PredictedResult(itemScores: List[ItemScore], rules: List[Rule])
val predictedResults = List(PredictedResult(List(ItemScore(42), ItemScore(11)), List(Rule("rule1"), Rule("rule2"))))
println(predictedResults.mkString("\n"))
然后我们得到不错的输出 out-of-the-box 而无需覆盖 toString
PredictedResult(List(ItemScore(42), ItemScore(11)),List(Rule(rule1), Rule(rule2)))