Scala字符串 - 如何更改行

时间:2014-11-23 19:35:50

标签: string scala

我试图根据结果创建一份内容丰富的报告。 我目前有一个.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"字符串。

2 个答案:

答案 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")