Scala 基于类的集合中的过滤器元素

Scala 基于类的集合中的过滤器元素,scala,scala-collections,Scala,Scala Collections,我有一个抽象的AAA类和BBB、CCC和DDD子类。基本上,我还拥有AAA的不同子类的哈希集。我需要以某种方式过滤它,只从中获得BBB 大概是这样的: var example: Set[test.AAA] = hashSet(BBB.e1, CCC.e2, BBB.e3, BBB.e4, DDD.e5) def magicalFunction = ??? example.magicalFunction => example: Set[BBB] = Set(e1, e3, e4) 这

我有一个抽象的AAA类和BBB、CCC和DDD子类。基本上,我还拥有AAA的不同子类的哈希集。我需要以某种方式过滤它,只从中获得BBB

大概是这样的:

var example: Set[test.AAA] = hashSet(BBB.e1, CCC.e2, BBB.e3, BBB.e4, DDD.e5)

def magicalFunction = ???

example.magicalFunction

=> example: Set[BBB] = Set(e1, e3, e4)

这是你想要的吗

sealed trait AAA;
case class BBB(tag: String) extends AAA;
case class CCC(tag: String) extends AAA;
case class DDD(tag: String) extends AAA;

val example: Set[AAA] = Set(new BBB("e1"), new CCC("e2"), new BBB("e3"), new DDD("e4"))
val onlyBBB = example.collect { case x: BBB => x } 
// Set(BBB(e1), BBB(e3))