Scala - 从地图中有效地提取列表

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

我有一个大的json对象:myNestedObject

{
    "size": 2,
    "values": [{
        "name": "mullock",
        "upstatus": "Green",
        "details": {
            "key": "rupture farms",
            "server": "mudos",
            "owner": "magog_cartel",
            "type": "NORMAL",
            "links": {
                "self": [{
                    "address": "https://mudos.com:port/access"
                }]
            }
        }
    },{
        "name": "tassadar",
        "upstatus": "Orange",
        "details": {
            "key": "archon",
            "server": "protoss",
            "owner": "aspp67",
            "type": "NORMAL",
            "links": {
                "self": [{
                    "address": "https://aiur.com:port/access"
                }]
            }
        }
    }],
    "limit": 100
}

这是案例类如下所示:

import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper

case class Result(size: Int, limit: Int, values: Seq[Values])
case class Values(name: String, upstatus: String, details: ValuesDetails)
case class ValuesDetails(key: String, server: String, owner: String, `type`: String, links: ValuesDetailsLinks)
case class ValuesDetailsLinks(self: Seq[ValuesDetailsLinksAddress])
case class ValuesDetailsLinksAddress(address: String)

object Foo {
    val mapper = new ObjectMapper() with ScalaObjectMapper 
    mapper.registerModule(DefaultScalaModule)
    def test(Json): Unit
        val return = mapper.readValue[Result](Json)

myNestedObject.size

是一个给出数组长度的字段

myNestedObject.values(ⅰ)

试图将以下值提取到List [String]

myNestedObject.values(ⅰ)。名称

我一直在使用粗略的for循环来提取代码。

 val selectNames: List[String] = (
    for (i <- 0 to myNestedObject.size-1 toList) yield
        myNestedObject.values(i).name
)

重构我的代码并尝试使用.map(不成功)做同样的事情,两次尝试:

myNestedObject.map(_ => values(i).name) 

myNestedObject.(values(i).name).asInstanceOfList

免责声明:我是一个完整的新手。

SOLUTION:可以在不指定索引的情况下访问值列表

myNestedObject.values.map(_.name)
scala refactoring nested-lists
2个回答
3
投票

我想你可以这样做:

myNestedObject.values.map(_.name)

1
投票

迪伦格拉尔德的答案是正确的,但你也可以使用同等的理解

for (x <- myNestedObject.values)
  yield (x.name)

这使用map方法去了版本。对于像这样的简单情况,我更喜欢直接调用map方法,但我想我会提到for版本作为替代方案。

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