anosenzo
7/2/2015 - 2:45 AM

gistfile1.scala

class NingunaRutinaPudoSerCompletada extends RuntimeException

object AnalizadorDeRutinas {
  
  def analizarRutinasSegunCriterio(pokemon : Pokemon, rutinas : List[Rutina], criterio : (Pokemon, Pokemon) => Boolean) : Try[String] = {
    
    rutinas.map(rutina => (rutina.nombre, rutina.realizarRutina(pokemon)) )
           .filter(tuplaRutinaPokemonResultante => tuplaRutinaPokemonResultante._2.isSuccess)
           .sortWith( (tupla1, tupla2) => criterio(tupla1._2.get, tupla2._2.get))
           .headOption match{
              case Some(tuplaRutinaPokemonResultante) => Try(tuplaRutinaPokemonResultante._1)
              case None => Try(throw new NingunaRutinaPudoSerCompletada)
            }
  }
  
}