要在值属性的基础上拆分Scala Map对象

时间:2016-10-10 10:52:51

标签: scala

我的scala代码中有一个地图,它有一个字符串作为键,一个用户定义的对象作为值。我想根据值的属性将此贴图拆分为三个不同的贴图对象。

这可能吗?有人可以分享一种方法吗?我一直试图搜索,但没有找到任何例子。我是斯卡拉的新手并感谢任何帮助...

1 个答案:

答案 0 :(得分:3)

假设你有一张人的地图,你想根据一个人的年龄将其划分为三张地图。

case class Person(name: String, age: Int)

val map = Map(
  "p1" -> Person("person_1", 15),
  "p2" -> Person("person_2", 30),
  "p3" -> Person("person_3", 40),
  "p4" -> Person("person_4", 55),
  "p5" -> Person("person_5", 65)
)
// map: scala.collection.immutable.Map[String,Person] = Map(p4 -> Person(person_4,55), p5 -> Person(person_5,65), p3 -> Person(person_3,40), p2 -> Person(person_2,30), p1 -> Person(person_1,15))


val dividedMaps = map.groupBy({ case (key, person) =>
  if (person.age < 20 ) "teenager"
  else if (person.age < 50) "adult"
  else "old"
})
// dividedMaps: scala.collection.immutable.Map[String,scala.collection.immutable.Map[String,Person]] = Map(old -> Map(p4 -> Person(person_4,55), p5 -> Person(person_5,65)), teenager -> Map(p1 -> Person(person_1,15)), adult -> Map(p3 -> Person(person_3,40), p2 -> Person(person_2,30)))