のようなものがあってList[Option[A]]
、これを に変換したい場合List[A]
、標準的な方法は を使用することですflatMap
:
scala> val l = List(Some("Hello"), None, Some("World"))
l: List[Option[java.lang.String]] = List(Some(Hello), None, Some(World))
scala> l.flatMap( o => o)
res0: List[java.lang.String] = List(Hello, World)
今はo => o
単なる恒等関数です。次のような方法があるはずだと考えていました。
l.flatMap(Identity) //return a List[String]
しかし、 をジェネリック化できないため、これを機能させることができませんobject
。いくつか試してみましたが、効果はありませんでした。このようなものを機能させた人はいますか?
ベストアンサー1
アイデンティティがあるPredef 内の関数。
l flatMap identity[Option[String]]
> List[String] = List(Hello, World)
for 式の方が良いと思います:
for(x <- l; y <- x) yield y
編集:
型パラメータ (Option[String]) が必要な理由を理解しようとしました。問題は Option[T] から Iterable[T] への型変換にあるようです。
恒等関数を次のように定義します。
l.flatMap( x => Option.option2Iterable(identity(x)))
型パラメータは省略できます。