Dire Ho una funzione che controlla se qualche operazione sia applicabile a un'istanza di A e, in caso affermativo, restituisce un'istanza di B o Nessuno:Scala: filtrare un insieme di opzioni
def checker[A,B](a: A) : Option[B] = ...
Ora voglio per formare una nuova raccolta che contenga tutte le istanze valide di B, lasciando cadere i valori Nessuno. Il seguente codice sembra fare il lavoro, ma c'è sicuramente un modo migliore:
val as = List[A](a1, a2, a3, ...)
val bs =
as
.map((a) => checker(a)) // List[A] => List[Option[B]]
.filter(_.isDefined) // List[Option[B]] => List[Option[B]]
.map(_.get) // List[Option[B]] => List[B]
Grazie!
flatMap che merda –
@oxbow_lakes Credo che la citazione corretta sia: _ "Cos'è questa? Ora amatoriale? FlatMap quella merda!" _ –
La citazione è nata su twitter? – huynhjl