2016-10-10 24 views
0

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

这可能吗?有人可以分享一种方法来做到这一点?我一直在寻找,但没有找到任何例子。我在斯卡拉是一个新手,并感谢任何帮助...

回答

2

可以说你有一个人的地图,你想根据一个人的年龄分成三个地图。

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)))