Desidero filtrare input non validi dai dati di input. Attualmente sto usando scala.util.Try
per avvolgere eventuali eccezioni. Di seguito è riportato un semplice esempio in cui 3I genera uno NumberFormatException
. Mi stavo chiedendo se c'è un modo migliore per farlo in Scala?Conversione di un elenco [Prova [A]] in Elenco [A] in Scala
val data = List (("Joe", "20"), ("James", "30"), ("Pete", "3I"))
scala> val parsedData = data.map{ d => Try{Person(d._1, d._2.toInt) }}
parsedData: List[scala.util.Try[Person]] = List(Success(Person(Joe,20)), Success(Person(James,30)), Failure(java.lang.NumberFormatException: For input string: "3I"))
scala> val validdata = parsedData.map{ x => x match {
| case Success(s) => Some(s)
| case Failure(f) => None }
| }
validdata: List[Option[Person]] = List(Some(Person(Joe,20)), Some(Person(James,30)), None)
scala> validdata.flatten
res13: List[Person] = List(Person(Joe,20), Person(James,30))
Grazie. Ma c'è un modo migliore di gestire la parte "Prova"? –
Un modo migliore per fare cosa, esattamente? Non vedo niente di sbagliato nel modo in cui lo stai usando, se tutto ciò che vuoi è scartare i fallimenti. –
Sì, un modo migliore per scartare i fallimenti. –