解析 Seq[Future[Either[A, Seq[B]]]] - Scala Cats

2024-01-31

我在尝试解决方法的结果时遇到问题。更具体地说,我有:

def methodA(): Future[Either[Error, Seq[A]]]

在某些时候,我想为列表的每个元素调用此方法并合并结果。 像这样的东西:

val tes: Seq[Future[Either[Error, Seq[A]]]] = relevantRounds.map(round =>
            methodA()
          )

你知道我该如何解决这个问题吗Seq[Future[Either[Error, Seq[A]]]]?

所以我最终想要的是Future[Either[Error, Seq[A]]]包含整个列表结果的序列。


您可能正在寻找

  def combine[A](s: Seq[Future[Either[Error, Seq[A]]]]) = {
    Future.sequence(s)
      .map(x => {
        x.foldRight(Right(Seq()): Either[Error, Seq[A]]) {
          (e, acc) => for (xs <- acc.right; x <- e.right) yield x ++ xs
        }
      }
      )
  }

如果您希望仅在前一个成功时才执行函数,请使用此

  def combine[A](s: Seq[() => Future[Either[Error, Seq[A]]]]): Future[Either[Error, Seq[A]]] =
    combine(Seq(), s)

  def combine[A](acc: Seq[A], s: Seq[() => Future[Either[Error, Seq[A]]]]): Future[Either[Error, Seq[A]]] = s match {
    case x +: Nil =>
      val v = x.apply()
      v.andThen {
        case Success(Right(r)) => Success(Right(acc ++ r))
        case Success(Left(l)) => Success(Left(l))
        case Failure(f) => Failure(f)
      }
    case x +: xs =>
      val v = x.apply()
      v.andThen {
        case Success(Right(r)) => combine(acc ++ r, xs)
        case Success(Left(l)) => Success(Left(l))
        case Failure(f) => Failure(f)
      }
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解析 Seq[Future[Either[A, Seq[B]]]] - Scala Cats 的相关文章

随机推荐

  • 使用 PHP 从字符串中获取数字

    我有字符串 one foo bar 4 baz 5 qux quux two bar baz 2 bar three qux bar 12 quux 3 foo four foo baz 3 bar 13 quux foo 如何找到这些字符
  • Amazon Emr - 当我们拥有核心节点时,任务节点需要什么?

    我最近在学习Amazon EMR 据我所知 EMR集群让我们选择3个节点 Master 运行主要 Hadoop 守护进程 如 NameNode 作业跟踪器和资源管理器 运行 Datanode 和 Tasktracker 守护进程的核心 仅运
  • 为什么ajax调用后页面会刷新

    我有一个活动 如果它是模糊的 那么页面不会刷新 但如果它是点击事件 那么页面就会重新加载 到底是什么原因呢 weeklygeneratebtn on click function store name on blur function va
  • 有没有办法在 Android SDK 模拟器中获取可复制粘贴的调试输出?

    我在 Android 模拟器中生成了一些信息 我能看到获取它的唯一方法是使用 Log 类 但是 您无法从 DDMS 日志窗口进行复制和粘贴 这真的很烦人 因为我无法在另一个应用程序中使用该信息 例如 如果不重新输入它 有没有更好的方法从模拟
  • 如何从 Microsoft Office 2007 保存 ImageMSO 图标?

    我从 Microsoft Office 2007 中发现了很多漂亮的图标 您知道如何使用 VBA 将所有图标提取并保存为 PNG 文件吗 部分图像MSO http rabu4g bay livefilestore com y1p2SF1q6
  • 刚创建数据库后,无法以 root 身份访问该数据库

    作为 root localhost mysql gt CREATE USER aaa Query OK 0 rows affected 0 00 sec mysql gt GRANT USAGE ON TO aaa WITH MAX QUE
  • 何时使用属性和方法?

    我是来自 C 的 NET 世界的新手 我正在尝试更好地理解属性 我注意到 Microsoft 在 NET 框架中到处都使用了属性 使用属性比创建 get set 方法有优势吗 是否有关于何时应使用属性的通用准则 以及命名约定 它是纯粹的语法
  • 在 C++ 中创建 Windows 命名管道

    我正在尝试在 C Windows 中创建两个进程之间的简单通信 就像 Linux 中的 FIFO 一样 这是我的服务器 int main HANDLE pipe CreateFile TEXT pipe Pipe GENERIC READ
  • 打开 Thread Sanitizer 会产生信号 SIGABRT

    当我在 Xcode 版本 11 3 11C29 中创建一个新的单视图应用程序并运行时 一切正常 当我打开线程清理时 并尝试运行同一个应用程序 我明白了Thread 1 signal SIGABRT 这是回溯 lldb bt thread 1
  • WatchOS 2(测试版 5):watchAppInstalled 返回 false

    Watch App已安装在手表上 我可以在手表上点击并运行它 但是watchAppInstalled方法返回 false 另外 我只能使用 Xcode 7 安装 Watch 应用程序 如果我尝试通过打开开关使用 Watch iOS 应用程序
  • 当我在文本框中输入一些文本时,OnKey 事件被调度两次。如何预防?

    在我的调试过程中 我发现发生了一件奇怪的事情 我有一个EditText我将当前活动定义为OnKeyListener在用户键入时执行验证 Code txtPhoneNumber setOnEditorActionListener this t
  • AntD 中未触发表单 onFinish/onSubmit

    antd表单onSubmit的简单demo不起作用 https ant design components form components form demo register https ant design components for
  • 自定义 ListView 适配器空对象引用

    不确定这里还没有初始化什么 我猜我必须在列表本身上手动创建一个新行 但我不知道如何开始 这是我用来创建和调用适配器的代码 Retrieve adapter UI param position current position with th
  • 在 SQL Server 中使用外键是否会对性能造成严重影响?

    我正在尽力说服我的老板允许我们在数据库中使用外键 到目前为止还没有运气 他声称这会降低大量性能 并表示我们只会时不时地清理无效引用 显然这在实践中行不通 数据库中充斥着无效的引用 有谁知道比较 基准或类似的东西可以证明使用外键不会对性能造成
  • UTF-8 字符在 Inno Setup 中无法正确显示

    我已经看到了有关此问题的其他几个线程 但我花了一段时间试图对其进行排序 但无济于事 这是我的 iss 文件的通用版本 Script generated by the Inno Setup Script Wizard SEE THE DOCU
  • 我们可以为 AVSpeechSynthesizer 提供自定义语音吗

    您好 我正在开发一个 IOS 应用程序 我想将文本转换为语音 为此 我使用 IOSAVSpeechSynthesizer SDK 我的问题是 除了IOS的默认声音之外 我们可以给它自定义的声音吗 例如 我可以给出一个孩子说一根弦的声音吗 或
  • 在 POM.xml 中插入 MAVEN_OPTS

    我必须增加 java 堆空间来编译我的项目 我发现的唯一方法是修改 mvn bat 并设置 set MAVEN OPTS XX PermSize 256m XX MaxPermSize 256m Xms1300M Xmx1300M 所有同事
  • 如何在竖屏模式下使用Zxing?

    目前 zxing 库仅支持横向模式 对于我的应用程序 我需要在纵向模式下使用 这是纵向模式扫描的解决方案 首先在您的应用程序级 gradle 文件中声明这两行 implementation com journeyapps zxing and
  • void 元素和空元素相同吗?

    我从 90 年代就开始编写 HTML 但我刚刚发现colgroup and col元素 根据MDN https developer mozilla org en US docs Web HTML Element col col is a 空
  • 解析 Seq[Future[Either[A, Seq[B]]]] - Scala Cats

    我在尝试解决方法的结果时遇到问题 更具体地说 我有 def methodA Future Either Error Seq A 在某些时候 我想为列表的每个元素调用此方法并合并结果 像这样的东西 val tes Seq Future Eit