我有一个Seq[String]
表示一个文件,每个字符串都是文件中的一行。
我正在迭代这些行并解析记录:
fileLines.zipWithIndex.foreach {
case(fileLine, filePosition) => parseRecord(fileLine, filePosition)
}
现在,对于最后一条记录,我需要进行不同的解析。比方说parseLastRecord()
.最好的 Scala 方法是什么?
我问题的主要原因是,在我已经使用的 parseRecord 中进行最后一行解析是完全可以的,但是,我不想将 filePosition+totalSize 传递到其中......
在模式匹配时,您可以检查索引并从那里调用要调用的任何函数。
例如,如果最后一个元素我正在打印一些东西,否则以下示例中的每个元素。
List(1, 2, 3, 4).zipWithIndex.foreach{
case (element, index) if index == 3 => println("last element")
case (element, index) => println(element)
}
输出
1
2
3
last element
所以,你的情况如下,
fileLines.zipWithIndex.foreach {
case(fileLine, filePosition) if filePosition == fileLines.length-1 => parseLastRecord(fileLine, filePosition)
case(fileLine, filePosition) => parseRecord(fileLine, filePosition)
}
使用模式匹配
val l = List(1,2,3,4)
val spe = l.length - 1
l.zipWithIndex.foreach{ case(item, pos) => {pos match { case `spe` => println(s"$item $pos special"); case _ => println(s"$item $pos");}}}
在您的情况下
val last = fileLines.length - 1
fileLines.zipWithIndex.foreach {
case(fileLine, filePosition) => {filePosition match {
case `last` => parseLastRecord(fileLine, filePosition)
case _ => parseRecord(fileLine, filePosition);
}