如何将List [String] 转换为字符串列表

3
我有一个Option[List[String]],其中包含多个字段,我想使用它们作为参数创建对象。除了手动创建之外,还有其他方法吗?
细节:
class Foo(var1: String, var2: String, var3: String)

我做不到

foo = new Foo(datarow)

并且不愿意这样做

foo = new Foo(datarow.get(0), datarow.get(1), datarow.get(2))

如果“Option”是“None”,或者列表有多于或少于3个元素,应该发生什么? - yǝsʞǝla
我和Aleksey有同样的问题。另外,你能不能使用类似于val (var1, var2, var3) = datarow.take(3)这样的东西?// 我忽略了Option,因为你可以使用模式匹配来解包列表。 - eribeiro
1个回答

9

有一种安全的方法可以做到这一点,而且还相当简明:

class Foo(var1: String, var2: String, var3: String)

val datarow = Option(List("a", "b", "c"))

val result: Option[Foo] = datarow.collect {
  case v1 :: v2 :: v3 :: _ => new Foo(v1, v2, v3)
}

collectpattern matching在列表的前三个元素上的组合表示“如果这个Option不为空并且包含至少三个元素的列表,则使用它们来实例化Foo。”

最终你得到的是一个Option[Foo],而不是一个Foo,但这是为了避免由于Option为空或者列表没有足够多的元素所导致的运行时错误而付出的小代价。


谢谢,这并不完全是我在寻找的,但仍然是一个非常稳定和可能是最佳的解决方案。 - vampireLady

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接