在Scala中,来表达这一点:折期权VS折上采集
val opt:Option[String] = Some("a")
if(opt.isEmpty) "" else opt.get
您可以Options
使用此fold
模式:
opt.fold("")(_)
然而fold
在集合行为有所不同。我怎样才能实现藏品一样,而无需编写:
case class Container(description: String, collection: Seq)
val col = Seq()
if(col.nonEmpty) {
Some(Container("some description", col))
} else {
None
}
换句话说,我怎么能优雅返回Some()
收集只有当它是不是空的?
你试过'headOption'吗?或者'headOption.map(无论在哪里)' – maks
另外,'if(opt.isEmpty)“”else opt.get'会更加惯用'opt.getOrElse(“”)' – Dave
为什么if/else不是“优雅”?对我来说,这是完美的发现。如果由于某种原因你不需要'if/else',这里有一种方法:'Some(col).filter(_。nonEmpty).map(c => Container(“some description”,c))' – sjrd