scala将迭代器[选项[T]]转换为迭代器[T]

oxb*_*kes 12 scala scala-collections

我有一个Iterator[Option[T]]和我想的Iterator[T]那些OptionS其中T isDefined.必须有一个比这更好的方法:

it filter { _ isDefined} map { _ get }
Run Code Online (Sandbox Code Playgroud)

我原本以为在一个结构中它是可能的......有人有什么想法吗?

DRM*_*ver 15

如果it是的话Iterable

val it:Iterable[Option[T]] = ...
it.flatMap( x => x )                //returns an Iterable[T]
Run Code Online (Sandbox Code Playgroud)

如果it是的话Iterator

val it:Iterator[Option[T]] = ...
it.flatMap( x => x elements )       //returns an Iterator[T]
it.flatMap( _ elements)             //equivalent
Run Code Online (Sandbox Code Playgroud)


soc*_*soc 11

在较新的版本中,现在可以:

val it: Iterator[Option[T]] = ...
val flatIt = it.flatten
Run Code Online (Sandbox Code Playgroud)

  • 嗯,是的,你现在.当提问和回答问题时,这不起作用.(如果你不能说,你使用"简单"这个词的含义就是前面的讨论者设法忽略了直截了当的答案.) (2认同)

Jus*_*s12 5

这对我有用(Scala 2.8):

it.collect {case Some(s) => s}
Run Code Online (Sandbox Code Playgroud)