Scala代码与java.util.NoSuchElementException崩溃:接下来是空迭代器

Kun*_*mar 6 scala apache-spark

我的代码崩溃了java.util.NoSuchElementException:接下来是空迭代器异常.

def myfunction(arr : Array[(Int,(String,Int))]) = {
val values = (arr.sortBy(x => (-x._2._2, x._2._1.head)).toList)
...........................
Run Code Online (Sandbox Code Playgroud)

代码在我试图对数组进行排序的第一行崩溃.

var arr = Array((1,("kk",1)),(1,("hh",1)),(1,("jj",3)),(1,("pp",3)))
Run Code Online (Sandbox Code Playgroud)

我试图在内部元组的第二个元素的基础上对数组进行排序.如果存在相等性,则应该对内部元组的第一个元素进行排序.

输出 - ((1,("pp",3)),(1,("jj",3)),(1,("hh",1)),(1,("kk",1)) )

这在一些情况下崩溃(通常它工作正常),我猜是由于空数组.

我怎样才能摆脱这种崩溃或任何其他优雅的方式来实现相同的结果.

use*_*379 12

这是因为您的一个数组项(Int,(String,Int))包含空字符串.

"".head
Run Code Online (Sandbox Code Playgroud)

导致

java.util.NoSuchElementException:下一个空迭代器

使用 x._2._1.headOption


Kun*_*mar 4

val values = (arr.sortBy(x => (-x._2._2, x._2._1)).toList)
Run Code Online (Sandbox Code Playgroud)

从语句中删除 head 是可行的。由于中的空字符串,这会崩溃arr

var arr = Array((1,("kk",1)),(1,("hh",1)),(1,("jj",3)),(1,("pp",3)),(1,("",1)))
Run Code Online (Sandbox Code Playgroud)