迭代Scala Seq / List(或其他类似的集合)对象的最好方法是什么,并设置特定对象字段的值,以防它们为空?
例如,案例类:
case class AmazingData(age: Int, name: String)
val ad1 = AmazingData(12, "bar")
val ad2 = AmazingData(12, "foo")
val ad3 = AmazingData(12, null)
val alotOfAmazingData: Seq[AmazingData] = Seq(ad1, ad2, ad3)
现在我想迭代 alotOfAmazingData
并为具有null的那些设置名称值 .
2 回答
如果你想保持完整的集合,你只能使用
map
并包含谓词:如果您只关心空名称,可以过滤出设置了名称字段的实例,只留下
null
,然后map
然后通过copy
设置它们:或使用
collect
:虽然我鼓励你根本不使用
null
,而是使用Option[String]
,让你的案例类看起来像这样:当您想使用可选的
name
字段时,可以使用map
等 .迭代一个集合并获得一个带有修改元素的版本的好方法是
map
函数 .map
是一个高阶函数,它迭代集合并将函数应用于每个元素,并将结果作为新集合返回 .获取AmazingData的函数,检查name是否为null,然后给出一个新的AmazingData,如果是,则返回默认名称,否则返回输入不变 . 这将传递给map函数,该函数将其应用于集合的每个元素 .
首先避免null是一种更好的方法