2016-03-29 6 views
0

私は人々のセットを持っていると言うSet[People]。各人には年齢があります。私はMap[Int, Seq[People]]という関数を作りたいと思っています。年齢が0から100までの各年齢には、その年齢の人のシーケンスが存在するか、元のコレクションにその年齢の人がいなければ空のシーケンスがあります。Scala:一連のキーからコレクション上にマップを作成する方法は?

I.e.私は

Set[People].groupBy(_.age) 

出力はもちろんの

Map[Int, Seq[People]](0 -> Seq[John,Mary], 1-> Seq[People](), 2 -> Seq[People](Bill)... 

groupByは人がいないそのため、これらすべての年齢層を省略した

を線に沿って何かをやっています。これをどのように実装すればよいですか?あなたが空ではないシーケンスが年齢に対応したマップを持っているので

答えて

0

、あなたは空のコレクションで残りを埋めることができます。

val fullMap = (0 to 100).map (index => index -> map.getOrElse(index, None)).toMap 
1

設定マップのデフォルト値:

val grouped = people.groupBy(_.age).withDefaultValue(Set()) 

場合値をマップすることができるシーケンスにする必要があります

val grouped = people.groupBy(_.age).mapValues(_.toSeq).withDefaultValue(Seq()) 

覚えている限り、ドキュメントそれはそれを置く:

Note: `get`, `contains`, `iterator`, `keys`, etc are not affected by `withDefault`. 
関連する問題