Фильтрация списка Scala по типу
У меня есть такая структура классов
abstract class A
class B extends A
class C extends A
class D extends A
class E extends A
и у меня есть коллекция различных экземпляров, например:
val xs = List(new D, new B, new E, new E, new C, new B)
У меня вопрос, есть ли элегантный способ отфильтровать некоторые из подклассов из списка?
Позволять'говорят, что я хочу все экземпляры, кроме B 'с и с 's. Я могу сделать это с кучей isInstanceOf 's, или с помощью команды collect:
val ys = (xs collect {
case b: B => None
case c: C => None
case notBorC => notBorC
}).filter(_ != None).asInstanceOf[List[A]]
Это работает, но чувствует себя неловко, в основном из-за фильтра и приведения. Есть ли более элегантный способ? Меньше кода предпочтительнее, и яЯ хотел бы иметь решение, которое нене нужно обновлять, если я добавлю больше подклассов A.