如何从Option [Seq [Case类]]中提取Seq [String],>

问题描述 投票:0回答:2

我有一个json,我将json解析为以下case类。我使用play json进行解析。以下是我的案例类

case class Result(id: String, account : Option[Seq[Account],data: Option[Seq[Data]])
case class Account(accountId: Option[String] = None)
case class Data(primaryId: Option[String] = None,
                            accountId: Option[String] = None)

从数据案例类中,我需要所有的primaryId作为Seq [String],以将数据案例类的accountId与Account案例类的accountId匹配。

以下是我尝试过的代码片段。我尝试了2种方式进行]

第一种方式

primaryIds = data.map(cd =>
            for{
                c <- cd
              if c.relatedAccountId == account.accountId
            }yield c.primaryId.get)))

第二种方式

primaryIds = data.map(_.collect {
                    case s if s.relatedAccountId.equals(account.accountId) & s.primaryId.isDefined => s.primaryId.get

这是我的问题

使用s.primaryId.get是否正确。如果s.primaryId为None怎么办。而且None.get将引发异常。有没有更好的方法来解决这个问题。请让我知道

我有一个json,我将json解析为以下case类。我使用play json进行解析。以下是我的案例类案例类Result(id:字符串,account:选项[Seq [Account],data:Option [Seq [Data] ...

scala playframework
2个回答
0
投票

.get上使用Option[_]几乎总是一个坏主意。此外,您可以通过第一种方式比较选项。这不是一个好主意,因为它可能会导致一些奇怪的结果(None ==None=> true)。


0
投票

类似这样的方法应该起作用:

© www.soinside.com 2019 - 2024. All rights reserved.