【发布时间】:2021-02-27 10:20:45
【问题描述】:
假设我有这样的类型:
val checkConstraints : List[Either[NonEmptyList[String], Valid[Data]]
如何检查此列表中是否至少有一个元素是左元素?即,当我进行验证检查时,它为 List[Data] 中的至少一个元素生成了一个 NonEmptyList。不确定这是否是检查 List[Data] 是否包含至少一个未通过验证的元素的最佳方法。我所做的是:
val result = (check(data.f1), check(data.f2)).mapN{
case (f1, f2) =>
Valid(Data(f1, f2))
}.toEither
我能想到一种方法:
val dd: List[Data] = result.collect { case Valid(value) => value }
if (data.size =!= dd.size) { // then I know there was at least on failure
invalid("there is at least one data point which has failed validation")
} else {
Valid(dd)
}
有没有更好的方法来做到这一点?
【问题讨论】:
-
您也可以
sequence来获取列表中的任何一个。此外,右边是 Valid 的 any 感觉不正确,直接使用 Data 即可。也许您可以显示将您带到该结果的代码?您可能在某处使用了错误的方法。
标签: scala scala-cats either