比较数组中的相同case类数据

enyaitl3  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(393)

我的案例课程如下:

case class bar(id:String, name : String, gender : String, dob : String)

样本数据如下:

val barList = Array(bar("1", "ABC", "M", "2000-06-06"), 
                    bar("2", "DEF", "F", "2009-11-12"), 
                    bar("1", "GHI", "M", "2002-06-30"), 
                    bar("2", "JKL", "F", "2008-10-30"))

现在我想得到最大和最小dob的人的名字为基础的id

def getMaxDOBName(id :String) = {  val idarray = barList.groupBy(_.id)(id).sortBy(_.dob); idarray(0).name  }
  def getMinDOBName(id :String) = {  val idarray = barList.groupBy(_.id)(id).sortBy(_.dob); idarray(1).name  }

我得到以下输出:

scala> getMaxDOBName("1")
res16: String = ABC                 // wrong 

scala> getMaxDOBName("2")
res17: String = JKL              // wrong

我是否需要将dob转换为日期格式然后进行排序,或者我们可以得到任何简单的方法?

zynd9foi

zynd9foi1#

尝试使用 maxBy 以及 minByfilter :

def getMaxDOBName(id :String) = barList.filter(_.id == id).maxBy(_.dob).name

我个人认为,在一般情况下,将字符串转换为实际日期是更正确的方法。

相关问题