如果对函数的调用引发异常,如何继续处理?

蓝天

此函数对列表中指定位置的单词数进行计数,并输出一个包含单词的Map和该单词在列表中被提及的次数:

  def getTopLinks(data: List[String], positionOfElementToCount: Int) = {

    val words = data.map(d => d.split(",")(positionOfElementToCount).trim)
    val wordCount: Map[String, Int] = words.foldLeft(Map.empty[String, Int]) { (m, x) => m + ((x,    m.getOrElse(x, 0) + 1)) }
    val sortedWordCount = wordCount.toList.sortBy { _._2 }.reverse

    sortedWordCount

  }

此方法引发java.lang.ArrayIndexOutOfBoundsException。但是我该如何在上面的函数中忽略此异常。如果对列表中的元素引发了异常,则忽略它并继续。我不认为我可以绕行val单词= data.map(d => d.split(“,”)(positionOfElementToCount).trim)进行尝试捕获,因为那样我便无法继续处理,因为在某处抛出了异常在此声明中。

如果此过程在for循环中发生,那么我可以将try catch包裹在有问题的行周围,然后继续,但是在这种情况下,我不认为我可以这样做?

贾廷

应与此:

val words = data.flatMap { d =>
      val split = d.split(",")
      if (split.isDefinedAt(positionOfElementToCount))
        Some(split(positionOfElementToCount))
      else None
    }

一个更简单的完整版本(包括更简洁的@serejja代码)将是:

def getTopLinks(data: List[String], positionOfElementToCount: Int) = {
    val words = data.flatMap { d => d.split(",").drop(positionOfElementToCount).headOption }
    words.view.groupBy(x => x).map(x => (x._1 -> x._2.size)).toList
}   

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章