Scala代码输出冗余信息问题:如何仅获取符合条件的最后一行结果?
如何只保留Scala代码输出的最后一行结果?
嘿,我来帮你搞定这个问题!你的代码现在会输出所有匹配Malaysia的行,但你只需要最后一行对吧?其实很简单,只需要先收集所有符合条件的条目,再取最后一个来打印就好啦,这样就能避免重复输出。
修改后的代码
import scala.io.Source object CovidWorld { def main(args: Array[String]): Unit = { val filename = Source.fromFile("OOPAssignment3.txt") try{ // 先收集所有符合条件的马来西亚死亡数据字符串 val matchingDeaths = for { line <- filename.getLines.toList if line.contains("Malaysia") splitLine = line.split(",") // 增加数组长度检查,避免字段不足时抛出越界异常 if splitLine.length >= 8 && splitLine(7).nonEmpty } yield splitLine(7) // 安全获取最后一条匹配数据并打印,无匹配项时不会执行打印 matchingDeaths.lastOption.foreach { lastDeath => println("\n Malaysia latest total amount of death: " + lastDeath) } } finally{ filename.close } } }
关键修改说明
- 收集而非即时打印:用for推导式把所有符合条件的死亡数据先收集到列表中,而不是遍历一行就打印一行
- 增加健壮性检查:新增
splitLine.length >= 8的判断,防止文件中某些行的字段数量不足8个时抛出ArrayIndexOutOfBoundsException - 安全获取最后一项:使用
lastOption替代直接调用last,这样当没有任何匹配行时,不会抛出NoSuchElementException,而是静默跳过打印操作 - 按需打印:通过
foreach只有在存在最后一条数据时才执行打印逻辑,确保只输出你需要的最后一行结果
内容的提问来源于stack exchange,提问作者Arthur Leong
相关产品推荐
相关产品推荐

