我试图按未来布尔值对列表进行排序。
我有一个 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.
编辑:查看分区的签名,看起来我只能生成相同签名的两个列表,因此不同的签名可能要求太多。我想我可以稍后将清单压平。