2016-02-27 4 views
-1
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)) 
) 
) 
+0

Недостаточно кода для понимания того, что вы хотите. Отправьте код для 'A' и точно, что такое' B'. – marcospereira

ответ

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")) 
) 

Вы можете использовать для понимания, чтобы извлечь все даты, затем получить мин с minBy:

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)

+1

Это выглядит довольно хорошо. Я бы рекомендовал использовать .flatMap вместо 'filter (_. IsDefined)' и 'map'. Также сортировка и принятие первого элемента не так эффективна, как 'minBy', который работает в O (n) времени вместо O (n * logn). Попробуйте: l.flatMap (x => новая дата (...)). MinBy (_. GetTime) ' –

+0

спасибо за minBy, не знали о них. Если я использую flatMap, я получаю NoSuchElements для Nones? – soote

+1

Ах, авы, ты прав; виноват. Это должно быть 'l.flatMap (_. Map (x => новая дата (...)))'. 'flatMap' подобен' map', а затем 'flatten' в этом случае –