我有一个这样的对象:
case class MyObject(x : Int,y : String,...) {
val buckets = 3
def bucket = x % buckets // returns a number between 0 and |buckets|
}
(x是任意数字)
例如假设“buckets = 3”并且我们有很多对象
MyObject(x = 0, y = "Something", ...)
MyObject(x = 1, y = "Something else", ...)
....
...
使用“groupBy
”我使用MYObjects
收集“x % buckets
”,因此它会像:
val objects : Seq[MyObject] = ...
val groupedObjects : Map[Int: Seq[MyObjects]] = objects.groupBy(obj => x.bucket)
现在我想转换每个值,并重新组合到不同类型的子列表
所以假设对于group = 1中的每个项目,我想在另一个图层下嵌套并存储不同的计算值:
因此,假设初始分组后的桶0看起来像是:
bucket[0] = [obj1,obj2,...,objn]
我希望能够将存储桶“0”转换为包含另一个嵌套分组:
bucket[0] = Map(sub_bucket_0 -> [transformed(objects)...], sub_bucket_1 -> [transformed(object)...),....]
意味着最终我有一个类型为
的数据结构Map[Int,Map[Sub_bucket_type,Seq[TransformedObject_type]]]
答案 0 :(得分:1)
我认为您正在寻找的是mapValues()
,它会将Map的值元素修改为新的值和/或类型。
groupedObjects.mapValues(_.groupBy(/*returns new key type/value*/))
.mapValues(_.mapValues(_.map(/*transform MyObject elements*/)))