我试图根据结果创建一份内容丰富的报告。 我目前有一个.foreach循环遍历列表,并编写报告。
代码如下:
result.foreach {
tupleResult =>
tupleResult._3 match {
case "FirstTest" =>
language1 = createReport(tupleResult)
case "SecondTest" =>
language2 = createReport(tupleResult)
case "ThirdTest" =>
language3 = createReport(tupleResult)
}
finalReport = ""
}
每个" createReport"是一种在相关语言var中创建一行String的方法。 我希望每次迭代都在" finalReport"中添加不同的行。字符串。
" finalReport"的例子:
Report consists of the following:
1) language1
2) language2
3) language3
问题是如何将不同的变量创建为相同的" finalReport"字符串。
答案 0 :(得分:2)
更惯用的scala方法是不要同时做几件事并改变状态,而是将其视为单独的操作/表达式。像这样的东西:
val sortedResults = result.sortBy(_._3 match {
case "FirstTest" => 1
case "SecondTest" => 2
case "ThirdTest" => 3
})
val reportLines = sortedResults.map(result => createReport(result._3))
val finalReport = reportLines.mkString("\n")
答案 1 :(得分:1)
将排序与测试字符串相关联可以证明是一种解决方案,例如,
val ord = Array("FirstTest","SecondTest","ThirdTest").zipWithIndex.toMap
然后我们可以生成报告的各个部分,最后按照定义的顺序对它们进行排序,
val finalReport = result.map { tRes => (ord.get(tRes._3), createReport(tRes)) }
.sortBy(_._1)
.map(_._2)
.mkString("\n")