我编写了一个解析 Metrics 数据的方法,起初遇到了 transactionMap 类型的问题,它是 java.util.Map 。我使用 JavaConverters 解决了它。

def parseMetrics(metric: Metric) = {
    import scala.collection.JavaConverters._
    metric.transactionMap.asScala.values.map {
      case false => "N"
      case true => "Y"
    }.toList

但在那之后我在模式匹配真假值时遇到错误:pattern type is incompatible with expected type, found: Boolean, required: java.lang.Boolean
据我了解,Scala 不会链接两个隐式转换。有没有办法使用 JavaConverters 修复它?

最佳答案

使用 if/else 而不是 match 语句进行 boolean 检查:

def parseMetrics(metric: Metric) = {
    import scala.collection.JavaConverters._
    metric.transactionMap.asScala.values.map {
      x => if (x) "Y" else "N"
    }.toList

我怀疑在 if 语句中 java.lang.Boolean(我假设 x 在这里)可以通过 Boolean 被强制为 import scala.collection.JavaConverters._ ...但 match 语句不会执行相同的强制,但必须明确做出(或匹配在 java.lang.Boolean 值上)。

关于java - Scala - 链接两个隐式转换时如何进行模式匹配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54856780/

10-09 16:36