Sto facendo un po 'di ginnastica alla Scala dove ho lo Seq[T]
nel quale cerco di trovare l'elemento "più piccolo". Questo è quello che faccio adesso:scala - Min/max con Opzione [T] per eventuale Seq? Vuoto?
val leastOrNone = seq.reduceOption { (best, current) =>
if (current.something < best.something) current
else best
}
Funziona bene, ma non sono abbastanza soddisfatto - è un po 'lungo per una cosa così semplice, e I don't care much for "if"s. Utilizzando minBy
sarebbe molto più elegante:
val least = seq.minBy(_.something)
... ma min
e minBy
generano eccezioni quando la sequenza è vuota. Esiste un modo idiomatico e più elegante di trovare l'elemento più piccolo di una lista potenzialmente vuota come Option
?
è anche possibile usare 'seq reductionOption math.min'. Questo è più efficiente perché non richiede una conversione implicita. – sschaef
@Antoras buona idea, ma credo che le differenze siano in pratica ottimizzate - almeno, questo è quello che mostra il mio microbenchmark –