我正在使用Kantan CSV库 - https://nrinaudo.github.io/kantan.csv/ - 将CSV解码为案例类的集合。代码片段如下:
case class Journey(origin: String, destination: String)
val file = ??? // read file
val xs: Either[ReadError, List[Journey]] = ReadResult.sequence(file.readCsv[List, Journey](rfc.withHeader))
问题是:如何强制执行严格的解析,以便CSV包含任何没有2个字段的行,将引发错误并返回错误(作为ReadError)
答案 0 :(得分:0)
这可能已经很久了,但事实并非如此:如果我说对了,您想在遇到ReadError时抛出某种异常吗?这违反了函数式编程的目的,在函数式编程中,您不会从任何函数中引发异常,而是声明函数的返回类型中可能出错的地方-因此Either[ReadError, List[Journey]]
。
如果您不太在意错误本身,则可以将其“展平”为一系列选项,如下所示:
new File(filePath).readCsv[List, Journey](rfc.withHeader).map {
case Left(_) => None
case Right(value) => Option(value)
}
但是我不确定这是否是您想要的,并且您在途中失去了信息。但是通过这种方式,您将拥有一个发生错误的None
列表和一个其他情况下的Option[Journey]
列表,可以很方便地映射它们。