2017-09-02 5 views
0

Ich stecke fest versuchen, eine Seq[Seq[]] mit dem Ergebnis flatten. Also, was ich hatte, war dies:Scala flachte einen Seq [Future [Seq []]]

def getListsByLC(lcId: Int): Action[AnyContent] = Action.async { 
    listRepo.getListsByLC(lcId).flatMap { lists => 
     val items: Seq[Future[Seq[Item]]] = lists.map { list => 
     itemRepo.getItemsByList(list.id) 
     } 
     Future.sequence(items).map { result => 
     Ok(Json.obj("lists" -> lists, "items" -> result)) 
     } 
    } 
    } 

Das Ergebnis war offensichtlich ein array von arrays enter image description here

Nun, was ich tun wollte, ist flatten diese Future.sequence, um nur haben ein Array alle Elemente enthält. Dies, zusammen mit ähnlichen Versionen ich im Web gefunden surfen, ist das, was ich versuchte:

def getListsByLC(lcId: Int): Action[AnyContent] = Action.async { 
    listRepo.getListsByLC(lcId).flatMap { lists => 
     val items: Seq[Future[Seq[Item]]] = lists.map { list => 
     itemRepo.getItemsByList(list.id) 
     } 
     Future.sequence(items).map(._flatten) { result => 
     Ok(Json.obj("lists" -> lists, "items" -> result)) 
     } 
    } 
    } 

Hier bekomme ich diese Compilieren Fehler: enter image description here Sorry für die Qualität des Screenshots. Irgendwelche Ideen? Danke im Voraus!

+0

Angesichts Ihrer Screenshot es sieht aus wie Ihr Beispiel nicht kompiliert. Was hat die von Ihnen gepostete Ausgabe generiert? – pedromss

+0

Mein erstes Codebeispiel erzeugte die Ausgabe – Nocebo

+0

Dann sollten Sie den Screenshot gepostet haben, der die Ausgabe generiert hat. Nicht etwas, das nicht kompiliert wird. – pedromss

Antwort

1

Sie müssen _.flatten statt ._flatten anrufen und Sie fehlen einen zusätzlichen .map Anruf nachdem die Sequenzen Abflachung:

Future.sequence(items).map(_.flatten).map { result => 
    Ok(Json.obj("lists" -> lists, "items" -> result)) 
} 
+0

Dies ist genau das, was ich auch versuchte, aber es sagt für die zweite Karte : 'Kann Symbolkarte nicht auflösen' – Nocebo

+0

@Nocebo Ihr' flatten' Anruf hat einen zusätzlichen Fehler. –

+0

Danke Mann, jetzt kompiliert es. Sorry für solch einen blöden Fehler – Nocebo