假设我有一个sql,它将返回一个如下所示的结果集:
| 识别码|数值|
| - -|- -|
| A1级|值1|
| A1级|数值2|
| A1级|值3|
| 地下一层|值4|
| 地下一层|值5|
| 地下一层|值6|
val query = sql"""select blah""".query[(ID, VALUE)]
val result: ConnectionIO[(ID, List[VALUE])] = for {
tuples <- query.to[List]
} yield tuples.traverse(t => t._1 -> t._2)
这是我所能得到的最接近的结果,但我得到了一个编译器错误:
Could not find an instance of Applicative for [+T2](ID, T2)
我想要的是将其转换为Map[ID,List[VALUE]]
2条答案
按热度按时间332nm8kg1#
在这里,
.traverse
不是最有用的方法,请尝试以下方法:如果您的Scala版本低于2.13,您可以尝试:
0wi1tuuw2#
我不知道你用的是什么数据库,但是如果你有像postgresql这样的数组函数,你可以试着用
array_agg
和group by
。之后你可以在List[(ID, List[VALUE])]
上运行.asMap
或.groupBy
。