Фильтрация списка 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.

Ответы на вопрос(3)

Ваш ответ на вопрос