繁体   English   中英

scala:classcast 异常:java.util.HashMap 不能转换为 scala.collection.immutable.Map

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM