Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala—重新格式化/分组列表/映射到映射的更好方法_Scala - Fatal编程技术网

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类将是更好的方法