Donné
[
[
"1,2,r",
"2,2,r"
],
[
"1,3,r"
],
[],
[]
]
puis
[
[
"1,2,r",
"2,2,r"
],
[
"1,3,r"
],
[""],
[""]
]
sérialise avec 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 {
""
}
}
})
mais la sortie JSON devrait ressembler à ceci
val ss = List((1, 2, "r"), (2, 2, "r"), (1, 4, "r"), (1, 5, "p"), (1, 6, "s"))
3 Réponses :
Vous pouvez utiliser flatMap + Option comme suit
List(List(1,2,r, 2,2,r), List(1,4,r), List(), List())
val ss = List((1, 2, "r"), (2, 2, "r"), (1, 4, "r"), (1, 5, "p"), (1, 6, "s"))
val pp = ss
.groupBy(_._2)
.toSeq
.sortBy(_._1)
.map(_._2.flatMap {
case (x, y, z) if z == "r" =>
Option(s"$x,$y,$z")
case _ =>
None
})
println(pp)
Merci, pour la réponse ont essayé votre code, pp que je reçois est seq [List [String]], et je veux une réponse dans Array [Array [String]]. donc, j'ai converti pp en ce tableau [Array [String]]. Mais, une seule parenthèse vide a été ajoutée et la deuxième n'a pas été ajoutée lorsque j'ai représenté cela au format json. Json.toJson (Array [Array [String]])
@varsha Array est un type Java et non un type Scala, donc généralement le code Scala utilise List ou Vector pour ce genre de chose.
d'accord, mais pouvez-vous me dire pourquoi une seule parenthèse vide est ajoutée et non la deuxième dans la liste.
La solution simple consiste à utiliser collect plutôt que map dans le code interne. Vous pouvez également supprimer certaines des conversions de type sans modifier la logique:
ss.groupBy(_._2).toArray.sortBy(_._1).map {
_._2.toArray.collect {
case (x, y, z) if z == "r" =>
s"$x,$y,$z"
}
}
Si vous voulez Array [Array [String]] (comme suggéré dans les commentaires ) faites ceci:
ss.groupBy(_._2).toList.sortBy(_._1).map {
_._2.collect {
case (x, y, z) if z == "r" =>
s"$x,$y,$z"
}
}
Notez la différence entre List
scala> List(new String())
val res4: List[String] = List("")
scala> .length
val res5: Int = 1
et List vide d'un élément qui se trouve être vide String code>
scala> List("")
val res2: List[String] = List("")
scala> .length
val res3: Int = 1
Il est peut-être plus clair de voir que la chaîne vide "" représente une valeur réelle comme celle-ci
scala> List.empty[String] val res0: List[String] = List() scala> .length val res1: Int = 0