J'ai les tuples suivants: (1,"3idiots",List("Action","Adventure","Horror") que je dois convertir en une liste au format suivant:

List(
  (1,"3idiots","Action"),
  (1,"3idiots","Adventure")
)
1
Anish Shetty 27 janv. 2017 à 12:04

4 réponses

Meilleure réponse

Pour compléter les réponses précédentes, vous pouvez également utiliser pour-compréhension dans ce cas; cela pourrait rendre les choses plus claires à mon humble avis:

for(
     (a,b,l) <- ts; 
     s <- l
) yield (a,b,s)

Donc si vous avez:

val ts = List(
  ("a","1", List("foo","bar","baz")),
  ("b","2", List("foo1","bar1","baz1"))
)

Tu auras:

List(
      (a,1,foo), 
      (a,1,bar), 
      (a,1,baz),
      (b,2,foo1), 
      (b,2,bar1), 
      (b,2,baz1)
 )
5
mdm 27 janv. 2017 à 09:44

En supposant que vous ayez plus d'un tuple comme ceci:

val tuples = List(
    (1, "3idiots", List("Action", "Adventure", "Horror")),
    (2, "foobar", List("Foo", "Bar"))
)

Et vous voulez un résultat comme celui-ci:

List(
    (1, "3idiots", "Action"),
    (1, "3idiots" , "Adventure"),
    (1, "3idiots", "Horror"),
    (2, "foobar", "Foo"),
    (2, "foobar", "Bar")
)

La solution pour vous serait d'utiliser un flatMap, qui peut convertir une liste de listes en une seule liste:

tuples.flatMap(t =>
    t._3.map(s =>
        (t._1, t._2, s)
    )
)

Ou plus court: tuples.flatMap(t => t._3.map((t._1, t._2, _)))

1
Jakub Wojnowski 27 janv. 2017 à 09:42

Vous pouvez l'utiliser.

val question = (1,"3idiots",List("Action","Adventure","Horror"))
val result = question._3.map(x=> (question._1 , question._2 ,x))
1
Dhirendra 27 janv. 2017 à 17:34

Cela devrait faire ce que vous voulez:

val input = (1,"3idiots",List("Action","Adventure","Horror"))    
val result = input._3.map(x => (input._1,input._2,x))
// gives List((1,3idiots,Action), (1,3idiots,Adventure), (1,3idiots,Horror))
1
Raphael Roth 27 janv. 2017 à 09:38