首页 > 解决方案 > 搜索 json 键并返回空列表,如果其值为空字符串

问题描述

此代码不能很好地处理空字符串值:

val getPerson = (json \ "ID").asOpt[String].map(id => List(Person(name, id, birthday))).getOrElse(List.empty)

问题是 ID 可以是空字符串,Person 的构造函数允许 id 为空(按设计),但我不希望 Person 在这个阶段没有 ID。

我试过了:

val getPerson = (json \ "ID").asOpt[String].map(id => if (id.nonEmpty) List(Person(name, id, birthday))).getOrElse(List.empty)

但是返回类型AnyList[Person]

我的目标是在空id返回 List.empty的情况下

标签: scala

解决方案


除了@pme 答案之外,您应该使用List.empty[Type](Whether Stringor Person) 而不是List.empty的原因是因为 List.empty实际上是 type List[Nothing]

因为您List[Person]在一种情况下返回,而List[Nothing]在另一种情况下,您的返回类型为Any.

无论如何,当您处理空集合(Seq、List、..)时,您应该始终更喜欢List/Seq.empty[Type],因为它更清楚地表达了您的意图,并且不需要实例化(空)重复参数参数列表。


推荐阅读