如何在序列中找到最小值

时间:2016-02-27 02:58:56

标签: scala sorting apache-spark minimum

A = ... //tuples of Medication(patientid,date,medicine)
B = A.groupby(x => x.patientid)

示例B如下所示 - 现在我需要找到最小日期,如何在scala中执行此操作?

(
  478009505-01,
  CompactBuffer(
    Some(Medication(478009505-01,Fri Jun 12 10:30:00 EDT 2009,glimepiride)), 
    Some(Medication(478009505-01,Fri Jun 12 10:30:00 EDT 2009,glimepiride)),
    Some(Medication(478009505-01,Fri Jun 12 10:30:00 EDT 2009,glimepiride))
  )
)

1 个答案:

答案 0 :(得分:0)

对类型做出一些假设:

case class Medication(id: Int, date: String, medicine: String)

val l = List(
  Some(Medication(478009505, "Fri Jun 12 10:30:00 EDT 2010", "glimepiride")),
  Some(Medication(478009505, "Fri Jun 12 10:30:00 EDT 2008", "glimepiride")),
  None,
  Some(Medication(478009505, "Fri Jun 12 10:30:00 EDT 2011", "glimepiride"))
)

您可以使用for comprehension提取所有日期,然后使用minBy获取min:

import java.text.SimpleDateFormat
val format = new SimpleDateFormat("EEE MMM dd hh:mm:ss zzz yyyy")
def createDateTime(s: String) = new Date(format.parse(s).getTime))

val dates = for { 
    optMed <- l                  // foreach item
    med <- optMed                // if it contains some value
} yield createDateTime(med.date) // create a comparable date

dates.minBy(_.getTime)           // get the minimum date

结果是最早的日期(2008-06-12)