scala.math.BigInt无法强制转换为java.lang.Long

时间:2018-05-24 20:02:15

标签: scala casting sbt long-integer

我在调用此函数时遇到上述错误

def filterOutNoInvPrices(storeNum: Long, inventoryMap: Map[Long, Long]) = {
    val inv = inventoryMap.get(storeNum)
    val minimumUnitsCheck:Boolean = inv.nonEmpty && inv.get.toInt > 3
    println("what" + minimumUnitsCheck)
    if (minimumUnitsCheck) {
      Some(storeNum, inv.get)
    }
    else
      None
  }

更具体地说,它位于inv.nonEmpty && inv.get.toInt > 3行。 我调用filterOutNoInvPrices的函数是getBasicStats

def getBasicStats(priceMap:Map[Long, String], invMap:Map[Long, Long])={
    priceMap
      .toSeq
      .map(storeAndPrice => {
        val price = getPriceAndPriceType(storeAndPrice._2)._1
        (price, filterOutNoInvPrices(storeAndPrice._1, invMap))})
      .filter(_._2.nonEmpty)
      .map(record => (record._1, record._2.get))
  }

在我调用此函数之前,我明确地让inventoryMap为Map[Long, Long]

val invMap:Map[Long, Long] = inventoryMap
val pMap:Map[Long, String] = priceMap
val basicStats = getBasicStats(pMap, invMap)

我的代码编译成功。我在运行测试时遇到此错误。我确实传递了自己的测试数据,但如果它是由数据引起的,那么数据映射是否应该提前失败?(例如,当我明确声明地图时会发生?)这是自下而上的。

  1. 我不明白为什么我会收到此错误
  2. 我从哪里获得BigInt。
  3. 为什么要投射到java.lang.Long而不是scala.Long。
  4. 最近的堆栈跟踪是scala.runtime.BoxesRunTime.unboxToLong(BoxesRunTime.java:105)

0 个答案:

没有答案