【发布时间】:2020-03-04 01:22:59
【问题描述】:
我有一个可迭代的数组,我正在尝试将其转换为案例类,并且我正在映射它们以这样做。如果数组不可转换为案例类,我想记录警告并继续映射。但是,当我实现警告时,返回类型从Iterable[MyCaseClass] 变为Iterable[Any],这不是我想要的。例如:
case class MyCaseClass(s1: String, s2: String)
object MyCaseClass {
def apply(sa: Array[String]) = new MyCaseClass(sa(0), sa(1))
}
val arrayIterable: Iterable[Array[String]] = Iterable(Array("a", "b"), Array("a", "b", "c"))
def badReturnType(): Iterable[Any] = { // Iterable[Any] is undesireable
arrayIterable map {
case sa: Array[String] if sa.length == 2 => MyCaseClass(sa)
case _ => println("something bad happened!") // but warnings are good
}
}
def desiredReturnType(): Iterable[MyCaseClass] = { // Iterable[MyCaseClass] is desireable
arrayIterable map {
case sa: Array[String] if sa.length == 2 => MyCaseClass(sa)
// but no warnings if things go wrong!
}
}
我想写一个满足以下条件的函数:
- 映射Iterable,将每个元素转换为
MyCaseClass - 当我得到一个无法转换为
MyCaseClass的数组时记录警告 - 记录警告后,传入匹配条件的数组将被忽略/丢弃
- 返回类型应为
Iterable[MyCaseClass]。
我怎样才能满足这些条件?
【问题讨论】:
标签: scala