Filterung eine Scala-Liste nach Typ

Habe ich eine Klasse Struktur wie diese

abstract class A
class B extends A
class C extends A
class D extends A
class E extends A

und ich habe eine Sammlung von verschiedenen Instanzen, zum Beispiel:

val xs = List(new D, new B, new E, new E, new C, new B)

Meine Frage ist, gibt es einen eleganten Weg heraus zu filtern einige der Unterklassen aus der Liste?

Sagen wir, ich möchte alle Instanzen außer B 's und C' s. Ich kann es mit einer Reihe von isInstanceOf ist, oder mit sammeln wie diese:

val ys = (xs collect {
    case b: B => None
    case c: C => None
    case notBorC => notBorC
}).filter(_ != None).asInstanceOf[List[A]]

Funktioniert es, aber es fühlt sich unbehaglich, vor allem, weil der filter und gegossen. Gibt es eine elegantere Möglichkeit? Weniger code ist bevorzugt, und ich möchte eine Lösung haben, die nicht aktualisiert werden müssen, wenn ich mehr Unterklassen von A.

InformationsquelleAutor hezamu | 2012-11-14
Schreibe einen Kommentar