scala - 使用 map 函数连接 JValue
scala - using map function to concatenate JValue
我最近开始使用 Scala,可能遗漏了一些关于 map 函数的信息。我知道它 return 是应用给定函数产生的新值。
例如,我有一个 JValue 数组,我想将数组中的每个值与另一个 JValue 连接起来,或者只是将其转换为一个字符串,如下例所示。
val salesArray = salesJValue.asInstanceOf[JArray]
val storesWithSales = salesArray.map(sale => compact(render(sale)) //Type mismatch here
val storesWithSales = salesArray.map(sale => compact(render(sale) + compact(render(anotherJvalue))) //Type mismatch here
正如我所见,存在类型不匹配,因为实际值是一个字符串,预期是 JValue。即使我做 compact(render(sale).asInstanceOf[JValue]
也不允许将字符串转换为 JValue。是否可以 return 与地图函数不同的类型?我如何处理数组值以将它们中的每一个转换为另一种类型?
看一下map
方法的类型签名:
def map(f: JValue => JValue): JValue
因此它与其他 map
方法有点不同,因为您必须指定一个 return 类型为 JValue
的函数。这是因为 JArray
特指一棵反序列化的 JSON 树,不能容纳任意对象或数据,只能容纳 JValue
s.
如果要处理 JArray
的每个值,请先对其调用 .children
。这给你一个 List[JValue]
然后有一个更通用的 map
方法,因为 List
s 可以容纳任何类型。它的类型签名是:
def map[B](f: A => B): List[B]
所以你可以这样做:
val storesWithSales = salesArray.children.map(sale => compact(render(sale)))
我最近开始使用 Scala,可能遗漏了一些关于 map 函数的信息。我知道它 return 是应用给定函数产生的新值。
例如,我有一个 JValue 数组,我想将数组中的每个值与另一个 JValue 连接起来,或者只是将其转换为一个字符串,如下例所示。
val salesArray = salesJValue.asInstanceOf[JArray]
val storesWithSales = salesArray.map(sale => compact(render(sale)) //Type mismatch here
val storesWithSales = salesArray.map(sale => compact(render(sale) + compact(render(anotherJvalue))) //Type mismatch here
正如我所见,存在类型不匹配,因为实际值是一个字符串,预期是 JValue。即使我做 compact(render(sale).asInstanceOf[JValue]
也不允许将字符串转换为 JValue。是否可以 return 与地图函数不同的类型?我如何处理数组值以将它们中的每一个转换为另一种类型?
看一下map
方法的类型签名:
def map(f: JValue => JValue): JValue
因此它与其他 map
方法有点不同,因为您必须指定一个 return 类型为 JValue
的函数。这是因为 JArray
特指一棵反序列化的 JSON 树,不能容纳任意对象或数据,只能容纳 JValue
s.
如果要处理 JArray
的每个值,请先对其调用 .children
。这给你一个 List[JValue]
然后有一个更通用的 map
方法,因为 List
s 可以容纳任何类型。它的类型签名是:
def map[B](f: A => B): List[B]
所以你可以这样做:
val storesWithSales = salesArray.children.map(sale => compact(render(sale)))