2016-06-30 3 views
0

私はscala.immutable.Map[String, scala.immutable.Set[String]]に変換したいjava.util.SetタイプのSet[Set[String], Set[String]]を持っています。マッピングは、一番外側のセット内の最初のセットの各エレメントが、一番外側のセットの二番目のセットにマップするようなものです。私は表現のために試してみました:java.util.Setからscala.immutable.Mapへの変換

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

groupRoleAccess

getPermissionsは私の最も外側のセット内の第2のセットを与え、

は私の最も外側のセット内の最初のセットを提供し、最も外側の集合である

しかし、私が得るものはSet[Map[String, Set[String]]]collection.mutable.Setです。このセットを必要なマップに変更する機能を再度適用するか、より良い方法がありますか?

+0

スカラREPLから、Set [Set [String]、Set [String]]型の値の例を教えてください。また、 'desiredFunction(input example)=== desiredOutput'の例をお聞かせください。例: 'addOne(4)=== 5' –

答えて

1

を使用しています。 それはあなたにSet[(String, Set[String])]を与えるでしょう。あなたはそれから.toMapを実行してください。

(私はこれを推奨していませんが、完全性のためだけです)、あなたは持っているものの結果に.reduce(_ ++ _)を行うことができます。あなたのマップのセットを1つのマップにマージします。 (結果が空である可能性がある場合は、reduceの代わりにfoldLeft(Map.empty[String, Set[String]]){ _ ++ _ }が必要です)。

0

現在、あなたがやっていることは、forループがセットに追加するMap[String, Set[String]]を収集することです。あなたが何をしたいかを達成する

一つの方法は、タプルに出力するforループの結果で、その後、あなたはあなたのyieldyield user -> permissionsにを変更したいtoMap機能に

val x = for(user <- ...; permissions <- ...) yield (user, permissions) 
x.toMap 
関連する問題