此函数对列表中指定位置的单词数进行计数,并输出一个包含单词的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] 删除。
我来说两句