我有一个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))
答案 0 :(得分: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)
}
collect
和列表前三个元素上的模式匹配的组合表示"如果此Option
不是空的,并且它包含至少包含三个的列表元素,使用它们来实例化Foo
"。
您最终得到的是Option[Foo]
,而不是Foo
,但这是一个很小的代价,可以避免运行时错误,因为Option
为空或列表没有#&# 39;没有足够的元素。