2016-10-10 9 views
0

私はスカラコード内にキーとして文字列を持ち、値としてユーザ定義オブジェクトを持っています。このマップを、値のプロパティに基づいて3つの異なるマップオブジェクトに分割したいと考えています。値プロパティに基づいて分割されるスカラマップオブジェクト

これは可能ですか?誰かがこれを行う方法を共有することはできますか?私は検索しようとしていますが、例は見つかりませんでした。私はスカラの初心者であり、助けを感謝します...

答えて

2

あなたは人の地図を持っていて、それを人の年齢に基づいて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))) 
関連する問題