从Scala中的列表中删除BoxedUnit(也称“如何从存储过程收集值”)

从Scala中的列表中删除BoxedUnit(也称“如何从存储过程收集值”),scala,jdbc,Scala,Jdbc,我有一个函数可以非常优雅地执行SQL存储函数:它将参数作为一个列表[ProcedureParameters]。过程参数可以输入、输入或输出 当我从过程中获取返回值时,我会这样收集它们: val results: List[Any] = for (parameter <- ps.parameters) yield { index = index + 1 parameter match { case Out(Types.BIGINT) => cs.getL

我有一个函数可以非常优雅地执行SQL存储函数:它将参数作为一个列表[ProcedureParameters]。过程参数可以输入、输入或输出

当我从过程中获取返回值时,我会这样收集它们:

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...
    }
}
val结果:List[Any]=for(参数cs.getLong(索引)
case Out(Types.INTEGER)=>cs.getInt(index)
//这里有更多SQL到Java的映射。。。
}
}
这在遍历ProcedureParameters列表方面做得相当好,如果有Out(或InOut)参数,它将获得值

但是如果存在not值,我会得到一个
BoxedUnit

然后,
结果
列表返回如下:

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...
    }
}
列表(3007,(),(),(),(),(),(),(),0)

我尝试的第一件事是过滤掉BoxedUnit实例,但我似乎找不到一种方法来进行过滤。
.filter(!=BoxedUnit)
不起作用,因为BoxedUnit不是一个值

然后我开始研究一种方法来修改我的for CONTRUMENT(或YILD语句),使其只产生“真实”值(即,要么没有,要么某个实例),但仍然坚持这一点

任何建议都将不胜感激。谢谢

.filter(_ != (()))
BoxedUnit
是一个在您的用例中明显泄漏的实现细节。它是
单元
类型在JVM上的具体化,因此它唯一的实例是我们知道的类型单元的唯一值的好的旧的
()

BoxedUnit
是一个在您的用例中明显泄漏的实现细节。它是
单元
类型在JVM上的具体化,因此它唯一的实例是我们知道的类型单元的唯一值的好的旧的
()

BoxedUnit
是一个在您的用例中明显泄漏的实现细节。它是
单元
类型在JVM上的具体化,因此它唯一的实例是我们知道的类型单元的唯一值的好的旧的
()


BoxedUnit
是一个在您的用例中明显泄漏的实现细节。它是JVM上
单元
类型的具体化,因此它唯一的实例是好的旧
()
我们知道是类型
单位的唯一值

这些类型在哪里定义?输入输出,输出?或者
参数的类型是什么
?您可以尝试这样做:
对于{参数,这些类型在哪里定义?输入输出,输出?或者
参数的类型是什么?您可以尝试这样做:
{parameter这些类型是在哪里定义的?InOut,Out?或者
参数的类型是什么
?您可以尝试这样做:
对于{parameter这些类型是在哪里定义的?InOut,Out?或者
参数的类型是什么?您可以尝试这样做:
对于{参数谢谢!我以前从未遇到过它……在实验过程中,我还发现您可以通过以下方式摆脱它:
results.filter(!=scala.runtime.BoxedUnit.UNIT)
是的,这也行得通,因为
scala.runtime.BoxedUnit.UNIT
()
。不过您应该使用
()
,因为
scala.runtime.
下的所有内容都可能会在不通知的情况下更改或删除。谢谢!我以前从未遇到过它……在进行实验时,我还发现您可以使用以下内容来摆脱它:
结果。过滤器(!=scala.runtime.BoxedUnit.UNIT)
是的,这也行,因为
scala.runtime.BoxedUnit.UNIT
是编码
()
的实现细节。您应该使用
()
但是,因为
scala.runtime.*
下的所有内容都可能会在不通知的情况下更改或删除。谢谢!我以前从未遇到过它……在进行实验时,我还发现您可以通过以下方式摆脱它:
results.filter(!=scala.runtime.BoxedUnit.UNIT)
是的,这也行,因为
scala.runtime.BoxedUnit.UNIT
是编码
()
的实现细节。您应该使用
()
但是,因为
scala.runtime.*
下的所有内容都可能会在不通知的情况下更改或删除。谢谢!我以前从未遇到过它……在进行实验时,我还发现您可以通过以下方式摆脱它:
results.filter(!=scala.runtime.BoxedUnit.UNIT)
是的,这也行,因为
scala.runtime.BoxedUnit.UNIT
是编码
()
的实现细节。但是,您应该使用
()
,因为
scala.runtime.
下的所有内容都可能会在不通知的情况下更改或删除。