2016-06-30 11 views
0

Ich habe eine Set[Set[String], Set[String]] von java.util.Set Art, die ich in scala.immutable.Map[String, scala.immutable.Set[String]] konvertieren möchte. Das Mapping ist wie jedes Element der ersten Menge innerhalb der äußersten Menge an Karten der zweiten Menge der äußersten Menge. Ich habe versucht, einen für den Ausdruck:java.util.Set Umwandlung in scala.immutable.Map

for (groupRole <- groupRoleAccess; 
    user <- groupService.getGroup(groupRole.groupId).getUsers.asScala; 
    permissions = roleService.getRole(groupRole.roleId).getPermissions.asScala) 
    yield Map(user, permissions) 

wo groupRoleAccess den äußersten Satz ist,

gibt mir den ersten Satz innerhalb des äußersten Satzes,

getPermissions gibt mir den zweiten Satz innerhalb des äußersten gesetzt

Was ich jedoch bekomme, ist ein Set[Map[String, Set[String]]] und der collection.mutable.Set Typ. Wenden Sie erneut eine Funktion an, um dieses Set auf die Karte zu setzen, die ich brauche, oder gibt es einen besseren Ausweg?

+0

Könnten Sie bitte ein Beispiel geben, d. H. Von der Scala REPL, einen Wert vom Typ 'Set [Set [String], Set [String]]' '? Kannst du bitte auch ein Beispiel von 'sitedFunction (Eingabebeispiel) === selledOutput'? Beispiel: 'addOne (4) === 5' –

Antwort

1

Sie möchten Ihre yield-yield user -> permissions ändern verwenden. Das wird Ihnen eine Set[(String, Set[String])] geben. Sie tun dann .toMap darauf, und voila!

Alternativ (ich empfehle dies nicht, aber nur der Vollständigkeit halber), können Sie einfach .reduce(_ ++ _) auf das Ergebnis von dem, was Sie haben. Dadurch werden Ihre Karten in einer Karte zusammengefasst. (Hinweis: Wenn das Ergebnis möglicherweise leer ist, benötigen Sie foldLeft(Map.empty[String, Set[String]]){ _ ++ _ } statt reduce).

0

Im Moment sammeln Sie Map[String, Set[String]], die die for-Schleife zu einem Satz hinzufügt.

Ein Weg, um zu erreichen, was Sie ist das Ergebnis der for-Schleife in ein Tupel zur Ausgabe tun wollen und dann die Funktion toMap

val x = for(user <- ...; permissions <- ...) yield (user, permissions) 
x.toMap