我有一个元组的列表(让我们称之为L1
(,在这个元组中,_1
是一些有数据的类,_2
是一些其他有其他数据的类的列表(叫它L2
(。对于L1
的每个条目(即元组列表(,我需要将L2
的每个条目与相应的_1
合并。我正试着合成一个镜头,但是被卡住了。这里有一个代码片段来演示我试图实现的目标:
case class LiveData(information: String)
case class StoredData(uniqueId: String)
case class MergedData(uniqueId: String, information: String)
def merge(live: LiveData, stored: StoredData): MergedData = MergedData(stored.uniqueId, live.information)
type Data = (LiveData, List[StoredData])
type UpdatedData = (LiveData, List[MergedData])
def process(dataEntries: List[Data]): List[UpdatedData] = {
val stored = GenLens[Data](_._2).each
val live = GenLens[Data](_._1)
val composed = ???
???
}
我想做的是这样的事情:
def process(dataEntries: List[Data]): List[UpdatedData] = {
val someLens = ???
someLens.each.modify(merge)(dataEntries)
}
我的方向对吗?我是应该试着合成这两个镜头,还是需要完全不同的东西?我在我的项目中也使用了Cats,但我对它很陌生,目前还不知道它在这种情况下是否有用。
此类型进行检查和编译。
def merge(dataEntries: List[Data]): List[UpdatedData] =
dataEntries.map{
case (ld, sds) =>
(ld, sds.map(sd => MergedData(sd.uniqueId, ld.information)))
}
如果这不是你想要的,那么也许你可以更具体一点。