根据未来结果排序

2023-12-13

我试图按未来布尔值对列表进行排序。

我有一个 ID 列表,我需要查询外部服务以查明它们背后是否有上下文信息。我用来执行此操作的方法返回一个可选的 future。

通过使用分区方法,我希望创建两个 ID 列表,一个包含上下文信息,另一个不包含上下文信息。

这里的以下答案为此提供了很多帮助:Scala - 基于未来结果谓词排序

我现在有一个粗略的、未经测试的方法,看起来像这样,

val futureMatch = listOfIds.map( b => b.map{ j =>
  getContext(j).map{ k =>
    Map( j -> k)
  }
}).map(Future.sequence(_)).flatMap(identity)

val partitionedList = futureMatch.map(_.partition{
  case (k, Some(v)) => true
  case _ => false
})

因此,正如另一个问题中所建议的,我试图在同一级别获得所有答案,然后使用Future.sequence and flatMap(identity)展平嵌套的 future 层。

问题是这感觉不太有效。

理想情况下,成功的名单会有以下签名:List[Map[String, String]] not List[Map[String, Option[String]]失败的列表只是一个字符串列表,因此它只需要是一维的。就目前而言,我有两个相同的列表签名,它们有一些冗余。例如,在成功列表中,我知道这将存在,因此它不需要成为一个选项。

我有什么想法可以实现这种结构并生成两个具有不同签名的列表,或者即使这是最有效的方法。

Thanks.

编辑:查看分区的签名,看起来我只能生成相同签名的两个列表,因此不同的签名可能要求太多。我想我可以稍后将清单压平。


我也在我链接的问题的评论中找到了合适的解决方案。

val (matched, unmatched) =
  finalMatch.foldLeft(List.empty[Map[String, String]], List.empty[String]) {
     case ((matched, unmatched), p) => p match {
       case m:Map[String, String] => (m :: matched, unmatched)
       case s:String => (matched, s :: unmatched)
     }
   }

唯一的问题是它会导致类型擦除。我开了另一个问题来讨论这个问题。

使用 FoldLeft 处理类型擦除

谢谢大家。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据未来结果排序 的相关文章

随机推荐

  • 当我尝试启动 jetty 时,为什么 lambda 表达式会破坏 guice 错误处理?

    我在尝试启动 jetty 时遇到以下问题 出现以下异常 Execution default test of goal org apache maven plugins maven surefire plugin 2 17 test fail
  • Xcode 中的 EXC_BAD_ACCESS 中断?

    我对 iPhone 开发和 Xcode 不太熟悉 不知道如何开始排除故障EXC BAD ACCESS信号 如何让 Xcode 在导致错误的确切行处中断 我似乎无法让 Xcode 在导致问题的线路上停止 但我确实在调试控制台中看到以下几行 1
  • Android 状态栏动画

    我是 Android 新手 我想做一个电池充电动画例如 在手机中 屏幕右上角的小图标在充电时会上下移动 并在当前电池百分比处停止 到目前为止 在我的代码中 我已经能够让它移动 但它永远不会停止 我想要的是动画在未充电时停止或以当前电池百分比
  • React refs 如何使用,何时使用?

    您好 感谢您阅读这个问题 我已经学习 React 几个星期了 我很难理解 refs 如何获取 React 的实例并将其放入 JS 变量中 例如 我们可以讨论文档的示例 class CustomTextInput extends React
  • 如何在Intellij Idea上导入滑动菜单?

    我正在使用intellij idea 如您所知 导入滑动菜单当你在 Eclipse 上运行时 将 lib 添加到你的全新项目中是很痛苦的 我做过一次 但我不再使用 intellij idea 我想知道是否有人知道如何在使用 Intellij
  • 在 R 中以全球视角绘制地理数据

    如何 是否可以在具有 d3 透视视图的地球上绘制地理数据 例如多边形层 类似于这个图形在维基百科上 我想要一个解决方案sf and ggplot大多数 但欢迎任何解决方案 我问这个主要是出于好奇 但由于我经常看到这样的图形 我想这个问题可能
  • Google API V3 多个信息窗口以及点击关闭

    我想出了如何使用多个带有信息窗口的标记 但当您单击另一个标记时它们不会关闭 我相信这是因为我正在为每个标记创建一个新的信息窗口 任何帮助将不胜感激
  • 显示自定义多个引脚显示位置错误的引脚

    这个问题已经困扰我好几个星期了 我有一个标签栏应用程序 在一个选项卡上 我输入点 在另一个选项卡上 这些点显示在地图上 引脚应该根据点的类型而不同 我面临的问题是 每次我从一个选项卡切换到另一个选项卡时 图钉图像都会从应有的图像更改为其他图
  • 在perl中获取数组中的多个值

    我正在编写一个 prel 程序 其中有一个包含以下模式的输入文件 FIELDS 1 2 3 4 OR FIELDS 1 10 3 A 11 10 7 D 9 10 11 A 值的数量不是恒定的 而是以 4 个为一组 可能有 4 8 12 1
  • Django - TemplateView 和 POST

    我有一个由 TemplateView 生成并包含 POST 表单的页面 我如何将此表单与 TemplateView 一起使用 有一个与我的代码类似的示例 class ProjetMixin object def get context da
  • 在 XML 上应用 XSLT v.2

    我编写了一个 XSLT 2 0 版本文件 当它应用于 XML 文件时 出现以下错误 ERROR Unsupported XSL element http www w3 org 1999 XSL Transform sequence 这是Ja
  • Firebase存储读取安全规则似乎没有任何效果

    我正在努力为 Firebase 存储设置安全规则 但读取规则似乎没有任何效果 rules version 2 service firebase storage match b bucket o match allPaths allow re
  • 防止在门控签入构建中释放触发器

    如何停止不产生任何工件的门控签入构建上的发布触发器 我有一个启用了门控签入的构建定义 在发布和发布工件步骤中 我将条件设置如下 ne 变量 Build Reason CheckInShelveset 这意味着 如果构建是由门控签入触发的 则
  • Laravel - 数据透视表上的附加关系

    我有一个带 2 个键的常规数据透视表 但是 我还有第三列 我想在其中存储具有一对多关系的不同密钥 这可能有吗 Example 数据透视表 组织1 组织2 关系类型1 2 11 3 2 在本例中 组织编号 1 与组织编号 2 存在关系 关系类
  • 如何使用 Fluent API 添加所有者属性的等效项?

    如果不使用 TrackState 上的属性或为发布者 文章指定 OwnsOne 我似乎无法执行此操作 有什么方法可以在不使用属性的情况下将 TrackState 全局标记为自有类型吗 对于通过 google 访问的人 如何使用 Fluent
  • com.mysql.jdbc.ConnectionImpl.getServerCharset(ConnectionImpl.java:3005) 处的 java.lang.NullPointerException

    我今天转移到 macOS 并重新创建了一个非常简单的数据库测试项目来检查我的 mySQL 连接 但我收到 SQL 异常 无法创建与数据库服务器的连接 这是完整的日志 https pastebin com iZrktVKn 我实际上复制了我在
  • 我可以在Maya、Blender中导入tensorflow和keras吗

    我正在参加一个研讨会 我们需要自动装备角色 也许 我们会使用深度学习的方法 任务是识别身体部位 我的问题 有没有办法将 TensorFlow 和 keras 或其他神经网络与 3D 软件连接起来 对于搅拌机 您可以按照本教程进行操作 htt
  • jQuery UI - 滑块 - 如何添加值

    fiddle 我有一套价值观 是否可以在不破坏和重建幻灯片实例的情况下添加新句柄或删除其中一些句柄 就像是 slider slider addValueAt 5 或删除 新值不能等于任何实际值 因此不得超过 12 个值 我已经得到了它的自定
  • Celery工人导入错误:没有名为“项目”的模块

    当我尝试启动工作人员时 我遇到了一个问题 导入错误 没有名为 项目 的模块 回溯 最近一次调用最后一次 File usr local bin celery line 11 in
  • 根据未来结果排序

    我试图按未来布尔值对列表进行排序 我有一个 ID 列表 我需要查询外部服务以查明它们背后是否有上下文信息 我用来执行此操作的方法返回一个可选的 future 通过使用分区方法 我希望创建两个 ID 列表 一个包含上下文信息 另一个不包含上下