从电子邮件列表中我得到2个值:
在scala中对此进行编码的惯用方法是什么?到目前为止,我有:
val primaryEmail = emails.headOption
val conf = Map[String, Any](
"email" -> primaryEmail,
"additionalEmails" ->
primaryEmail.map(_ => emails.tail).getOrElse(List())
)
Run Code Online (Sandbox Code Playgroud)
编辑:至于为什么有Any:我们使用GSON进行json序列化,并在内部将所有集合转换为java集合并将它们传递给jsonSerializationContext.serialize,它们将java.lang.Object作为参数,所以很Any适合我们.
Jen*_*olm 17
我可能只是drop第一个元素(如果你确定第一个元素总是主要的电子邮件).像这样:
val conf = Map[String, Any](
"email" -> emails.headOption,
"additionalEmails" -> emails.drop(1)
)
Run Code Online (Sandbox Code Playgroud)
如果主电子邮件不在列表中(列表为空),则不会出现异常.
了解一个scalaz.所有这些都可以在一个电话中找到:
val (primary, rest) = list <^> (nel => some(nel.head) -> nel.tail)
val conf = Map("email" -> primary, "additionalEmails" -> rest)
Run Code Online (Sandbox Code Playgroud)
示范:
scala> val list = List(1, 2, 3)
list: List[Int] = List(1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
如果非空
scala> val (primary, rest) = list <^> (nel => some(nel.head) -> nel.tail)
primary: Option[Int] = Some(1)
rest: List[Int] = List(2, 3)
Run Code Online (Sandbox Code Playgroud)
如果为空:
scala> val list = List.empty[Int]
list: List[Int] = List()
scala> val (primary, rest) = list <^> (nel => some(nel.head) -> nel.tail)
primary: Option[Int] = None
rest: List[Int] = List()
Run Code Online (Sandbox Code Playgroud)
该<^>电话说:如果此列表为空,则返回零的类型由返回类型功能的权利定义.如果列表非空,则将该函数应用于该列表
值nel是a NonEmptyList,我可以安全地调用head它tail,而不用担心它们会抛出异常.我的函数返回一个(Option[A], List[A])
当然,这个零只是(None, Nil)为了任何A