2016-03-29 2 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`. 
Смежные вопросы