Scala 用非形状透镜按任意场分组
我正在努力学习变形。我创建了一个非常简单的案例类:Scala 用非形状透镜按任意场分组,scala,shapeless,Scala,Shapeless,我正在努力学习变形。我创建了一个非常简单的案例类: case class Holding(ticker: String, assetClass: String, units: Double, mktValue: Double) 我希望能够对任意字段进行分组,即股票代码或资产类别列表上的持有量以及单位和mktValue的总和 这项工作: val map = list.groupBy(lens[Holding] >> 'assetClass) 那么,这是否: val mapped =
case class Holding(ticker: String, assetClass: String, units: Double, mktValue: Double)
我希望能够对任意字段进行分组,即股票代码或资产类别列表上的持有量以及单位和mktValue的总和
这项工作:
val map = list.groupBy(lens[Holding] >> 'assetClass)
那么,这是否:
val mapped = Map( 'assetClass -> (lens[Holding] >> 'assetClass), 'ticker -> (lens[Holding] >> 'ticker))
def makeLens(sym: Symbol) = {
mapped.get(sym).get
}
val map = list.groupBy(makeLens('assetClass).get)
创建一张用来放置镜头的地图似乎并没有遵循“扔掉你的玻利埃板”方法的精神。有没有办法做到这一点:
val sym = 'assetClass
val map = list.groupBy(lens[Holding] >> sym)
我需要能够尽可能通用地定义一个方法,该方法采用任意符号并对列表进行分组。可能吗?你看到我的答案了吗?是的。但是,如果makeLens方法使用的符号只有在运行时才真正知道会怎样呢。我想从Java中使用它,并将其作为使用QueryDSL的Java库的替代品—这个示例是否足够接近?请注意,标识字段的符号必须在调用站点静态已知。。。它不能是由IO.Ok构造的任意符号。我希望它可能是由IO构造的任意符号。