Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 搜索json键,如果其值为空字符串,则返回空列表_Scala - Fatal编程技术网

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)
添加到我的原始代码中。