2017-11-06 7 views
0

を失敗したと、私は定義されたネストされたマップと、以下の地図を持っている地図上toMapを使用して、私は生産機能getTagsを使用して地図(ネストされたマップ)のこの値を取得したいです次のエラー:スカラ:ネストされた地図は、私のコードでは

scala> def getTags(tags: Map[String, Map[String, List[String]]]): Map[String, List[String]] = { 
    | tags.map {_._2} 
    | } 
<console>:12: error: type mismatch; 
found : scala.collection.immutable.Iterable[Map[String,List[String]]] 
required: Map[String,List[String]] 
     tags.map {_._2} 
       ^

のでtoMap前に返されたタイプがIterable[Map[String, List[String]]]です:

scala> def getTags(tags: Map[String, Map[String, List[String]]]): Map[String, List[String]] = { 
    |  tags.map {_._2}.toMap 
    | } 
<console>:12: error: Cannot prove that Map[String,List[String]] <:< (T, U). 
      tags.map {_._2}.toMap 
         ^                 ^

私はtoMap機能を使用する前に、私が手にエラーがあることが確認されました。

にはどうすればMap[String, List[String]]を手に入れることができますか?

問題に関するお手伝いをお待ちしております。

+0

マップのマップがありますが、それらの内部マップのうちどれを取得しようとしていますか? – Tyler

答えて

1

に役立つかもしれません。しかし、あなたの関数:.mapを呼び出すとIterableを返しますので、

def getTags(tags: Map[String, Map[String, List[String]]]): Map[String, List[String]] = { 
    tags.map(_._2) 
} 

は、多くのMapsを返します。エラーを修正するには、ような単純なもの行うことができます:

def getTags(tags: Map[String, Map[String, List[String]]]): Map[String, List[String]] = { 
    tags.map(_._2).head 
} 

をしかし、これはあなたのロジックがどうあるべきかではないかもしれない、とマップが空だった場合も、例外をスローします。

+0

ありがとう!私は 'toList'関数を使用して終了しました。これは、多くのマップを返し、それに基づいてロジックをベースにするために、Hariでも推奨されていました。 – polarking

+0

関数の戻り値の型を変更しましたか? – Tyler

0

は、ToListメソッドに)(地図を変換してみ、これはあなたの関数Map[String, List[String]]の戻り値の型を使用すると、単一Mapを返すことになることを示しているため、エラーがあるあなた

+0

あなたの答えのいくつかのより多くの情報が有益でしょう。 – Pyves

関連する問題