从Scala中的List中删除BoxedUnit(又名“我如何从存储过程中收集值)

时间:2015-05-18 04:21:27

标签: scala jdbc

我有一个能够相当优雅地执行SQ​​L存储函数的函数:它将参数作为List [ProcedureParameters]。 ProcedureParameters可以进入In,InOut或Out。

当我从程序中得到返回值时,我会像这样收集它们:

val results: List[Any] = for (parameter <- ps.parameters) yield {
    index = index + 1
    parameter match {
        case Out(Types.BIGINT) => cs.getLong(index)
        case Out(Types.INTEGER) => cs.getInt(index)
        // Lots more SQL to Java specific mapping here...
    }
}

这可以很好地迭代过程参数列表,如果有一个Out(或InOut)参数,它会得到值。

但如果值,我会得到BoxedUnit

然后,results列表会像这样回来:

  

列表(3007,(),(),(),(),(),(),0)

我尝试的第一件事是过滤掉BoxedUnit实例,但我似乎无法找到办法。由于BoxedUnit不是值... {/ p>,.filter(_ != BoxedUnit)将无效

然后我开始研究修改我的for comprehension(或yield语句)的方法,所以它只产生“真实”值(也就是说,None或Some实例),但仍然坚持这一点。

任何建议都将深表感谢。谢谢!

1 个答案:

答案 0 :(得分:3)

.filter(_ != (()))

BoxedUnit是一个实际细节,显然已泄露在您的用例中。它是Unit类型的JVM的具体化,因此它唯一的实例是我们知道的()类型的唯一值Unit。< / p>