Scala 2.13 java.util.Map[String,Double] => scala.collection.IterableOnce[B]中没有可用的隐式视图

mrphzbgm  于 8个月前  发布在  Scala
关注(0)|答案(1)|浏览(75)

我将一些scala代码从2.12迁移到2.13,我有以下代码

def getMetrics(): java.util.Map[String, Double] ={
    transformers.map{
      case transformer => transformer match{
        case t: EvaluationTransformFunction => t.getMetric.asJava
      }
    }.flatten.toMap.asJava
  }

会产生错误

error: No implicit view available from java.util.Map[String,Double] => scala.collection.IterableOnce[B].
[ERROR]     }.flatten.toMap.asJava
[ERROR]       ^

你能解释一下这个错误是怎么回事吗?

pkmbmrz7

pkmbmrz71#

我们缺少了一些关于你正在操作的确切类型的信息,但想法是:

  • transformers.map(...)的类型是Iterable[SomeJavaCollectionType]
  • flatten只有在SomeJavaCollectionType可以被“转换/“视为”Iterable[SomeOtherType]时才有效,这样Iterable[SomeJavaCollectionType]就可以被视为Iterable[Iterable[SomeOtherType]]并因此变平
  • 没有这样的“隐式视图”可用于您的实际SomeJavaCollectionType,如果我读得正确,它似乎是JavaMap[String, Double]

我有点惊讶它在Scala 2.12中工作。也许有一个import可以让它在Scala 2.13中也能工作(即将“隐式视图”带入范围)。
无论如何,我会去掉内部的asJava,只在方法的末尾转换为Java集合:

def getMetrics(): java.util.Map[String, Double] ={
    transformers.map{
      case transformer => transformer match{
        case t: EvaluationTransformFunction => t.getMetric
      }
    }.flatten.toMap.asJava
  }

相关问题