如何在scala EitherT类中检查列表是否为空

时间:2019-03-04 20:09:29

标签: scala

我有以下代码,用于查询数据库并返回值,该值包装在EitherT类中,

 val result = emailModel.getStatusByEmail(emailAddress)

result type is : ProcessorResult[List[EmaiStatusDTO]] and 
type ProcessorResult[A] = ServiceResult[PermissionError, A] 
type ServiceResult[Err, A] = EitherT[Future, Err, A]

我需要检查DB的退货是否为空,我该怎么做?我尝试了这个,但显然无法正常工作,我是Scala的新手,还是想弄清楚...

if (result.collectRight().onComplete().isEmpty()) {
   return ProcessorResult(List(new EmaiStatusDTO(emailAddress, "Normal")))
} else {
   return result
}

1 个答案:

答案 0 :(得分:1)

据我了解,您正在使用类似EitherT from scalaz

getStatusByEmail返回一个“ future”(延迟的计算任务),(如果您运行它)将返回一个PermissionError或一个列表-List[EmaiStatusDTO]

您的意图是将空列表结果更改为某个固定常数。

为此,您可以仅使用EitherT.map函数:

val result = emailModel.getStatusByEmail(emailAddress)
val defaultStatusList = List(new EmaiStatusDTO(emailAddress, "Normal")
return result.map(l => if (!l.isEmpty) l else defaultStatusList)