2017-04-04 6 views
0

私は、機能的な方法でグループ化/書式設定に最良の方法または適切な方法をコーディングするという問題があります。Scala - 再フォーマット/グループ化するためのより良い方法リスト/マップをマップに

サンプル一覧は、私は、カテゴリとsub_categoryによってグループに望んでいたこの

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" 
     ) 
    ) 

です。期待される結果が出て期待プットがリストまたは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)) 
      ) 
     } 
     } 

のようなコードを行っている。この

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) 
     ) 
     ) 
    ) 

ですこれを行うための適切な方法を望んでいた誰も私を助けてください..?

答えて

2

これはあなたが探している結果を得ると思います。

list.groupBy(_("category")).mapValues(_.groupBy(_("sub_category"))) 

私はあなたがうまく設計case classが行くには良い方法だろうMapを使用しているように見えると言っています。

関連する問題