2012-03-02 5 views
4

これは初心者のスカラーの質問です。私はgetName()getYearOfBirth()メソッドを持つPersonオブジェクトを持つ人のリストを持っています。 groupByを使用してPersonオブジェクトをグループ化していますが、将来はPersonが多くの追加フィールドを持つため、 の名前をマップに入れたいだけです。年が鍵になるでしょう。groupbyを使用してScalaのマップ値のオブジェクトフィールドを選択する方法

val people = List(
Person("Tom", 1985), 
Person("Abigail", 1987),  
Person("Joyce", 1984), 
Person("James", 1987), 
Person("Scott", 1985), 
Person("Ruth", 1984) 
) 


var birthdayMap = people.groupBy(x=> x.getYearOfBirth()) // map to getName() ? 

答えて

8
scala> persons groupBy (_.year) mapValues (_ map (_.name)) 
res9: scala.collection.immutable.Map[Int,scala.collection.immutable.Set[String]] = Map(1984 -> Set(Joyce, Ruth), 1987 -> Set(James, Abigail), 1985 -> Set(Tom, Scott)) 
+0

パーフェクト、vielenじめじめ。私はscalaj-collectionを使ってMapをjava.util.Mapとして返しています。ただし、キー値はscala.collection.mutable.Bufferです。 Javaからこのバッファ内の個々の名前にアクセスするにはどうすればよいですか? – Reimeus

+0

@Reimeus私はあなたの質問をよく理解していません。しかし、Javaからアクセスすると、 'collection.JavaConversions.bufferAsJavaList'でヒントを得ることができます。 – elbowich

+0

ありがとう、私はScalaヘルパーオブジェクトでJavaレイヤーに渡すのではなく、すべてのコレクションの反復処理を行う方がクリーンであると判断しました。 – Reimeus

関連する問題