Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 用非形状透镜按任意场分组_Scala_Shapeless - Fatal编程技术网

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构造的任意符号。