Scala zipWithIndex在字符串序列上,对最后一个条目执行不同的操作

Scala zipWithIndex在字符串序列上,对最后一个条目执行不同的操作,scala,Scala,我有一个Seq[String]表示一个文件,每个字符串都是文件中的一行 我正在迭代这些行并解析记录: fileLines.zipWithIndex.foreach { case(fileLine, filePosition) => parseRecord(fileLine, filePosition) } 现在,对于最后一条记录,我需要进行不同的解析。比如说parseLastRecord()。Scala最好的方法是什么 我的问题的主要原因是,在我已经使用的parseRecor

我有一个
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);
}