Если PredictedResult
- это класс дел, подобный этому
case class PredictedResult(value: String)
val predictedResults = List(PredictedResult("aaa"), PredictedResult("bbb"))
println(predictedResults.mkString("\n"))
тогда мы получим хороший вывод
PredictedResult(aaa)
PredictedResult(bbb)
Однако, если это обычный класс, как это
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
Чтобы получить хороший вывод для обычного класса, нам нужно переопределить его 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"))
тогда мы получаем хороший вывод из коробки без необходимости переопределения toString
PredictedResult(List(ItemScore(42), ItemScore(11)),List(Rule(rule1), Rule(rule2)))