Scala 搜索json键,如果其值为空字符串,则返回空列表
此代码无法很好地处理空字符串值:Scala 搜索json键,如果其值为空字符串,则返回空列表,scala,Scala,此代码无法很好地处理空字符串值: val getPerson = (json \ "ID").asOpt[String].map(id => List(Person(name, id, birthday))).getOrElse(List.empty) 问题是ID可以是空字符串,Person的构造函数允许ID为空(根据设计),但我不希望在这个阶段中没有ID的人 我试过: val getPerson = (json \ "ID").asOpt[String].map(id => if
val getPerson = (json \ "ID").asOpt[String].map(id => List(Person(name, id, birthday))).getOrElse(List.empty)
问题是ID可以是空字符串,Person的构造函数允许ID为空(根据设计),但我不希望在这个阶段中没有ID的人
我试过:
val getPerson = (json \ "ID").asOpt[String].map(id => if (id.nonEmpty) List(Person(name, id, birthday))).getOrElse(List.empty)
但是返回类型是Any
,而不是List[Person]
我的目标是处理返回列表为空的
id
情况。空的只需将类型添加到列表中即可。空的,例如:
scala> List.empty[String]
res0: List[String] = List()
在您的示例中,filter
可能是一个更好的解决方案:
val person = (json \ "ID")
.asOpt[String]
.filter(_.nonEmpty)
.toList
.map(Person(name, _, birthday))
除了@pme answer,您应该使用List.empty[Type]
(无论是String
还是Person
)而不是List.empty
的原因是List.empty
实际上是类型List[Nothing]
由于在一种情况下返回了List[Person]
,而在另一种情况下返回了List[Nothing]
,因此返回类型为Any
无论如何,当您处理空集合(Seq,List,…)时,您应该始终选择List/Seq.empty[Type]
,因为它更清楚地表达了您的意图,并且不需要实例化(空的)重复参数列表。如果ID的值为空,我需要这段代码来避免创建人员。除此之外,它还可以调整列表。空的[Person]
将解决Any
作为返回类型的问题。所以它应该做你想做的事情-返回一个空列表,以防没有IDadding。filter(u.nonEmpty)
添加到我的原始代码中。