相关疑难解决方法(0)

需要将 Seq[Option[A]] 转换为 Option[Seq[A]]

使用案例

我有一个文件列表,这些文件可能具有或不具有有效的 mime 类型。在我的代码中,我使用选项来表示这一点。

我需要将 Seq[Option[T]] 转换为 Option[Seq[T]] ,以便在某些文件无效时我不会处理该列表。

错误

这是下面的实现中的错误:

found   : (Option[Seq[A]], Option[A]) => Option[Seq[A]]
[error]  required: (Option[Any], Option[Any]) => Option[Any]
[error]     s.fold(init)(liftOptionItem[A])
Run Code Online (Sandbox Code Playgroud)

执行

def liftOptionItem[A](acc: Option[Seq[A]], itemOption: Option[A]): Option[Seq[A]] = {
    {
      acc match {
        case None => None
        case Some(items) =>
          itemOption match {
            case None => None
            case Some(item) => Some(items ++ Seq(item))
          }
      }
    }
  }

  def liftOption[A](s: Seq[Option[A]]): Option[Seq[A]] = {
    s.fold(Some(Seq()))(liftOptionItem[A])
  }
Run Code Online (Sandbox Code Playgroud)

此实现返回Option[Any]而不是Option[Seq[A]因为 的类型liftOptionItem[A]不适合。

scala fold scala-option

2
推荐指数
1
解决办法
3500
查看次数

标签 统计

fold ×1

scala ×1

scala-option ×1