として、子コレクションによって車のリストを拡大:は、私は車のリストを持っているキー
val cars = List(car1, car2, car3, car4, car5)
case class car(model: String, age: Int, partIds: Seq[String])
は、私は今、キーがpartIdで、値がマップにこのリストを変換したいですその部分のすべての車。
val partMap: Map[String, List[Car]]
として、子コレクションによって車のリストを拡大:は、私は車のリストを持っているキー
val cars = List(car1, car2, car3, car4, car5)
case class car(model: String, age: Int, partIds: Seq[String])
は、私は今、キーがpartIdで、値がマップにこのリストを変換したいですその部分のすべての車。
val partMap: Map[String, List[Car]]
あなたは中間型を使用して、いくつかのフープを介してジャンプする必要があります。解決策はまずリスト[Car]からリスト[PartId - > Car]に移動します。 Seqの部品を落とすことで、あなたの人生が楽になります。あなたは簡単にあなたの車をグループ化することができます。
mapValuesはMapの関数です。すべてのタプルを繰り返し処理し、mapの値と等しい型を取る関数が必要になります。私の場合はmapValuesの前にMap [String、List [String - > Car]]があります。リスト[(文字列、車]):
mapValuesは、署名(carMappingと機能を望んでいる、ここでA ...私たちの希望のタイプはもちろん、リストのある[車]
はGROUPBYとaの上に何かあります?mapValuesについて少し:http://markusjais.com/the-groupby-method-from-scalas-collection-library/
case class Car(model: String, age: Int, partIds: Seq[String])
object ListToMap extends App {
val car1 = Car("corolla", 1, Seq("b"))
val car2 = Car("camry", 5, Seq("b", "c"))
val car3 = Car("fit", 6, Seq("e"))
val car4 = Car("prelude", 2, Seq("e", "f"))
val car5 = Car("cobalt", 10, Seq("j"))
val cars = List(car1, car2, car3, car4, car5)
//For Every Car lets make the list of Tuples for PartId -> Car
def partMapping(car : Car) : Seq[(String, Car)] = car.partIds.map(part => part -> car)
def toPartMap(cars : List[Car]) : Map[String, List[Car]] =
cars
//Get the List of Tuples PartId -> Car and then flatten the internal list (same as map().flatten)
.flatMap(partMapping)
// group all the tuples by the partId
.groupBy(_._1)
// We currently have a Map[String, List[(partId -> Car)]] we need to clean that up a bit to remove the partId
.mapValues(carMapping => carMapping.map(_._2))
toPartMap(cars).foreach(println)
}
cars flatMap (x => x.partIds map ((_, x))) groupBy (_._1) mapValues (_ map (_._2))
あなたは_._ 2が何を表すかわからない何をしているかmapValues説明でき –
'車flatMap(X => x.partIdsマップ((_、X)))'を作成最初の要素がpartId、2番目の要素がcarであるタプルのリストpartId - >(partId、car)を作成する 'groupBy' partId' mapValues'は値をマップします(partId、ca r) 'を' 'ちょうど' 'car 'に変更します。 '_. 2 'はタプルの2番目の項目を取得することを意味します。お役に立てれば。 – ryan
私は、mapValuesがマップ上でのみビューを作成することを知りました。あなたはそれを使用してcarfulすることがあります:http://stackoverflow.com/questions/14882642/scala-why-mapvalues-produces-a-view-and-is-there-any-stable-alternatives – Jono