在 Scala 中提取后代的子列表

Loo*_*oom 1 casting scala descendant scala-collections

我有一个 class Foo extends Bar和一个List或其他基类集合:

val bars: Iterable[Bar] 
Run Code Online (Sandbox Code Playgroud)

我需要Foo从集合中提取所有元素。以下是代码:

val fooes: Iterable[Foo] = bars
    .filter(x => Try(x.isInstanceOf[Foo]).isSuccess))
    .map(_.isInstanceOf[Foo])
Run Code Online (Sandbox Code Playgroud)

有更简洁的方法吗?

jwv*_*wvh 7

val fooes: Iterable[Foo] = bars.collect{case foo:Foo => foo}
Run Code Online (Sandbox Code Playgroud)

.collect()方法采用偏函数作为其参数。在这种情况下,函数仅针对Foo类型定义。所有其他人都被忽略。