代码之家  ›  专栏  ›  技术社区  ›  coolk

斯卡拉:将Java列表映射到Scala映射

  •  0
  • coolk  · 技术社区  · 6 年前

    我有一个Java哈希表的列表,如下所示

    List[java.util.Map[String,String]] = List({id=1000, sId=1}, {id=2000, sId=1}, {id=3000, sId=2}, {id=3000, sId=1})
    

    如何将其转换为字符串的映射,list[string]? 例如

    1000 -> [1]
    2000 -> [1]
    3000 -> [2,1]
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Leo C    6 年前

    JavaConversions java.util.Map scala.collection.immutable.Map toMap List of Map[K, V] Map[K, List[V]] groupBy-mapValues

    val l: List[java.util.Map[String,String]] = List(
      new java.util.HashMap[String, String] { put("id", "1000"); put("sId", "1") },
      new java.util.HashMap[String, String] { put("id", "2000"); put("sId", "1") },
      new java.util.HashMap[String, String] { put("id", "3000"); put("sId", "2") },
      new java.util.HashMap[String, String] { put("id", "3000"); put("sId", "1") }
    )
    // l: List[java.util.Map[String,String]] =
    //   List({id=1000, sId=1}, {id=2000, sId=1}, {id=3000, sId=2}, {id=3000, sId=1})
    
    import scala.collection.JavaConversions._
    
    l.map(_.toMap.toList.map(_._2)).
      groupBy(_(0)).
      mapValues(_.map(_(1)))
    // res1: scala.collection.immutable.Map[String,List[String]] =
    //   Map(3000 -> List(2, 1), 1000 -> List(1), 2000 -> List(1))