如何使List [String]成为字符串列表

vam*_*ady 3 scala

我有一个Option [List [String]],我有几个字段,想要用它们作为参数创建一个对象.除了手动之外,有没有办法做到这一点?

细节:

class Foo(var1: String, var2: String, var3: String)
Run Code Online (Sandbox Code Playgroud)

我做不到

foo = new Foo(datarow)
Run Code Online (Sandbox Code Playgroud)

而且宁愿不做

foo = new Foo(datarow.get(0), datarow.get(1), datarow.get(2))
Run Code Online (Sandbox Code Playgroud)

Tra*_*own 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)
}
Run Code Online (Sandbox Code Playgroud)

collect列表前三个元素的组合和模式匹配表示"如果这Option不是空的,如果它包含至少包含三个元素的列表,则使用它们来实例化Foo".

你最终会得到一个Option[Foo],而不是一个Foo,但这是一个很小的代价,以避免运行时错误,因为它Option是空的或列表没有足够的元素.