ho una struttura di classe come questoFiltrare un elenco Scala per tipo
e ho una collezione dei diversi casi, ad esempio:
val xs = List(new D, new B, new E, new E, new C, new B)
La mia domanda è, c'è un modo elegante per filtrare alcune sottoclassi dalla lista?
Diciamo che voglio tutte le istanze tranne B e C. Posso farlo con un po 'di isInstanceOf di, o utilizzando raccogliere in questo modo:
val ys = (xs collect {
case b: B => None
case c: C => None
case notBorC => notBorC
}).filter(_ != None).asInstanceOf[List[A]]
Questo funziona ma ci si sente a disagio, soprattutto a causa del filtro e cast. C'è un modo più elegante? Si preferisce meno codice e mi piacerebbe avere una soluzione che non debba essere aggiornata se aggiungo più sottoclassi di A.
Sì, questa è una soluzione molto migliore del mio primo tentativo. – hezamu