Scala—重新格式化/分组列表/映射到映射的更好方法
我有一个问题,就是如何以功能性的方式对列表进行分组/格式化的最佳方式或正确方式进行编码 示例列表如下所示Scala—重新格式化/分组列表/映射到映射的更好方法,scala,Scala,我有一个问题,就是如何以功能性的方式对列表进行分组/格式化的最佳方式或正确方式进行编码 示例列表如下所示 val list = List ( Map( "name" -> "AAA", "id" -> "1", "category" -> "1", "sub_category" -> "1" ), Map( "name"
val list = List (
Map(
"name" -> "AAA",
"id" -> "1",
"category" -> "1",
"sub_category" -> "1"
),
Map(
"name" -> "BBB",
"id" -> "2",
"category" -> "1",
"sub_category" -> "2"
),
Map(
"name" -> "CCC",
"id" -> "3",
"category" -> "1",
"sub_category" -> "2"
),
Map(
"name" -> "DDD",
"id" -> "4",
"category" -> "2",
"sub_category" -> "1"
),
Map(
"name" -> "EEE",
"id" -> "5",
"category" -> "2",
"sub_category" -> "2"
)
)
Map(
2 -> Map(
2 -> MutableList(
Map(name -> EEE, id -> 5, category -> 2, sub_category -> 2)
),
1 -> MutableList(
Map(name -> DDD, id -> 4, category -> 2, sub_category -> 1)
)
),
1 -> Map(
2 -> MutableList(
Map(name -> BBB, id -> 2, category -> 1, sub_category -> 2),
Map(name -> CCC, id -> 3, category -> 1, sub_category -> 2)
),
1 -> MutableList(
Map(name -> AAA, id -> 1, category -> 1, sub_category -> 1)
)
)
)
我想按类别和子类别分组。预期的结果是这样的
val list = List (
Map(
"name" -> "AAA",
"id" -> "1",
"category" -> "1",
"sub_category" -> "1"
),
Map(
"name" -> "BBB",
"id" -> "2",
"category" -> "1",
"sub_category" -> "2"
),
Map(
"name" -> "CCC",
"id" -> "3",
"category" -> "1",
"sub_category" -> "2"
),
Map(
"name" -> "DDD",
"id" -> "4",
"category" -> "2",
"sub_category" -> "1"
),
Map(
"name" -> "EEE",
"id" -> "5",
"category" -> "2",
"sub_category" -> "2"
)
)
Map(
2 -> Map(
2 -> MutableList(
Map(name -> EEE, id -> 5, category -> 2, sub_category -> 2)
),
1 -> MutableList(
Map(name -> DDD, id -> 4, category -> 2, sub_category -> 1)
)
),
1 -> Map(
2 -> MutableList(
Map(name -> BBB, id -> 2, category -> 1, sub_category -> 2),
Map(name -> CCC, id -> 3, category -> 1, sub_category -> 2)
),
1 -> MutableList(
Map(name -> AAA, id -> 1, category -> 1, sub_category -> 1)
)
)
)
预期输出可以包含List或MutableList,我已经完成了如下代码
val filtered:mutable.Map[Int,mutable.Map[Int,mutable.MutableList[Map[String,String]]]] = mutable.Map()
for(each <- list) {
if(filtered.contains(each("category").toInt)) {
if(filtered(each("category").toInt).contains(each("sub_category").toInt)) {
filtered(each("category").toInt)(each("sub_category").toInt) += each
} else {
filtered(each("category").toInt) += (
each("sub_category").toInt -> mutable.MutableList(each)
)
}
} else {
filtered += (
each("category").toInt -> mutable.Map(each("sub_category").toInt -> mutable.MutableList(each))
)
}
}
val筛选:mutable.Map[Int,mutable.Map[Int,mutable.MutableList[Map[String,String]]]]=mutable.Map()
for(每个可变。可变列表(每个)
)
}
}否则{
过滤+=(
每个(“类别”).toInt->mutable.Map(每个(“子类别”).toInt->mutable.MutableList(每个))
)
}
}
我得到了结果,但这不是我想要的功能性方法。有人能帮我吗?我想这得到了您想要的结果
list.groupBy(_("category")).mapValues(_.groupBy(_("sub_category")))
我不得不说,看起来您正在使用
Map
,而设计良好的案例类
将是更好的方法。我认为这会得到您想要的结果
list.groupBy(_("category")).mapValues(_.groupBy(_("sub_category")))
我不得不说,看起来您正在使用Map
,而设计良好的case类将是更好的方法