Scala 如何在字符串数组中添加空括号

Scala 如何在字符串数组中添加空括号,scala,Scala,给定 然后 使用Json.toJson序列化到 val pp = ss.toArray.groupBy(_._2).toSeq.sortBy(_._1).toList.map(f => { f._2.map { case (x, y, z) => if (z == "r") { // when z == "s" || z =="p" empty bracket will be added s"

给定

然后

使用
Json.toJson
序列化到

val pp = ss.toArray.groupBy(_._2).toSeq.sortBy(_._1).toList.map(f => {
  f._2.map {
    case (x, y, z) => if (z == "r") { // when z == "s" || z =="p" empty bracket will be added
      s"$x,$y,$z"
    } else {
      ""
    }
  }
})
但是JSON输出应该是这样的

[
  [
    "1,2,r",
    "2,2,r"
  ],
  [
    "1,3,r"
  ],
  [""],
  [""]
]

您可以使用
flatMap
+
选项
,如下所示

val ss=List((1,2,“r”),(2,2,“r”),(1,4,“r”),(1,5,“p”),(1,6,“s”))
val pp=ss
.groupBy(u.u 2)
托塞克先生
.sortBy(u.u 1)
.map(u._2.flatMap{
如果z==“r”=>
期权(s“$x,$y,$z”)
案例=>
没有一个
})
println(pp)

您可以使用
flatMap
+
选项
,如下所示

val ss=List((1,2,“r”),(2,2,“r”),(1,4,“r”),(1,5,“p”),(1,6,“s”))
val pp=ss
.groupBy(u.u 2)
托塞克先生
.sortBy(u.u 1)
.map(u._2.flatMap{
如果z==“r”=>
期权(s“$x,$y,$z”)
案例=>
没有一个
})
println(pp)

简单的解决方案是在内部代码中使用
collect
而不是
map
。您还可以在不更改逻辑的情况下删除某些类型转换:

List(List(1,2,r, 2,2,r), List(1,4,r), List(), List())

如果希望
Array[Array[String]]
(如注释中所建议),请执行以下操作:


简单的解决方案是在内部代码中使用
collect
而不是
map
。您还可以在不更改逻辑的情况下删除某些类型转换:

List(List(1,2,r, 2,2,r), List(1,4,r), List(), List())

如果希望
Array[Array[String]]
(如注释中所建议),请执行以下操作:


注意空
列表

ss.groupBy(_._2).toArray.sortBy(_._1).map {
  _._2.toArray.collect {
    case (x, y, z) if z == "r" =>
      s"$x,$y,$z"
  }
}
以及恰好为空的一个元素的
列表

scala> List.empty[String]
val res0: List[String] = List()

scala> .length
val res1: Int = 0
也许更清楚地看到空字符串
表示这样的实际值

scala> List("")
val res2: List[String] = List("")

scala> .length
val res3: Int = 1

注意空
列表

ss.groupBy(_._2).toArray.sortBy(_._1).map {
  _._2.toArray.collect {
    case (x, y, z) if z == "r" =>
      s"$x,$y,$z"
  }
}
以及恰好为空的一个元素的
列表

scala> List.empty[String]
val res0: List[String] = List()

scala> .length
val res1: Int = 0
也许更清楚地看到空字符串
表示这样的实际值

scala> List("")
val res2: List[String] = List("")

scala> .length
val res3: Int = 1

谢谢,因为答案已经尝试了你的代码,我得到的pp是seq[List[String]],我想要数组[Array[String]]中的答案。因此,我将pp转换为这个数组[Array[String]]。但是,只添加了一个空括号,没有添加第二个括号。Json.toJson(Array[Array[String]]@varsha
Array
是一种Java类型而不是Scala类型,因此Scala代码通常会使用
List
Vector
来处理这类事情。好的,但是你能告诉我为什么只添加了一个空括号,而不是列表中的第二个括号吗?谢谢你的回答,我已经尝试了你的代码,我得到的pp是seq[List[String]],我想要数组[Array[String]]中的答案。因此,我将pp转换为这个数组[Array[String]]。但是,只添加了一个空括号,没有添加第二个括号。Json.toJson(Array[Array[String]]@varsha
Array
是一种Java类型而不是Scala类型,因此Scala代码通常会使用
List
Vector
来处理这类事情。好的,但是你能告诉我为什么只添加了一个空括号,而不是列表中的第二个括号吗。