![](/img/trans.png)
[英]Convert java.util.HashMap to scala.collection.immutable.Map in java
[英]scala: classcast exception: java.util.HashMap cannot be cast to scala.collection.immutable.Map
我有一个下面给出的Scala代码片段:
// country code to nameToPlaces traversable
val input : Traversable[(Int, java.util.Map[String, java.util.Set[String]])] ...
val nameToPlacesMap : Map[String, Set[String]] = input.toMap.
values.
map (x => x.toSeq). // throws a class cast exception
reduce((x,y) => x ++ y).
groupBy(_._1).
mapValues(_.map(_._2).
reduce((x,y)=>x.toSet ++ y.toSet))
nameToPlacesMap
预计会整理所有国家/地区的所有 nameToPlaces。 但是,在运行此代码时,我收到了 classcastexception
java.util.HashMap cannot be cast to scala.collection.immutable.Map
我试过添加asScala
但没有用。 我也在导入import scala.collection.JavaConverters._
任何帮助将不胜感激。
注意:我不认为这个问题是通用类广播异常的重复,如下所述:请修改您的判断。
您的外部地图中有几个 java 集合,您必须确保将它们全部转换。 据我所知,以下应该对你有用:
import java.util
import scala.collection.JavaConverters._
import scala.collection.mutable
val input : Traversable[(Int, java.util.Map[String, java.util.Set[String]])] =
Seq((1, new util.HashMap[String, java.util.Set[String]]()))
val nameToPlacesMap : Map[String, mutable.Set[String]] = input.toMap.mapValues(
// convert inner Map
_.asScala.mapValues(
// convert java.util.Set
mutable.Set.empty ++ _.asScala)
).values.
map (x => x.toSeq). // hopefully not anymore :: throws a class cast exception
reduce((x,y) => x ++ y).
groupBy(_._1).
mapValues(_.map(_._2).
reduce((x,y)=> x ++ y))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.