【发布时间】:2021-09-22 06:20:41
【问题描述】:
我是 scala 的初学者,我正在尝试在 Either 之上实现过滤器逻辑。现在我有一个函数getTaskId,它返回Future[Try[Int]],而我的filter logic 是基于Int。现在由于 filter 期望 boolean ,我无法在下面的代码 sn-p 中返回相同的内容。
val records: List[CommittableRecord[Either[Throwable, MyEvent]]] = ???
records.filter {
(x: CommittableRecord[Either[Throwable,MyEvent]]) =>
x.value match {
case Right(event: MyEvent) =>
getTaskId(event.get("task").get) filter {
case Success(value) => value > 1
case Failure(exception) => false
}
case Left(_) => false
}
}
我在返回 Future[Try[Int]] 的函数 getTaskId 上收到 filter 的错误
type mismatch;
found : scala.concurrent.Future[scala.util.Try[Int]]
required: Boolean
所以基本上filter 在Future 之上返回另一个Future 但父filter 期待boolean
非常感谢任何帮助。
【问题讨论】:
-
问题不够清楚,无法回答。你在过滤
List[Either]吗? -
你的函数应该返回一个
Future[Either[A, B]]而不是Either[A, B],因为你的函数是异步的。 -
@TausifSayyad 是的,我是
filteringList[Either] -
@curiousguy 你想在过滤结束时得到什么?哪种类型?
-
@BorisAzanov 这应该是我的过滤结果
CommittableRecord[Either[Throwable,MyEvent]]
标签: scala async-await future either