0

我有一个元组列表(我们称之为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,但我对此很陌生,目前看不出它在这种情况下是否有用。

4

1 回答 1

2

这类型检查和编译。

def merge(dataEntries: List[Data]): List[UpdatedData] =
  dataEntries.map{ 
    case (ld, sds) =>
      (ld, sds.map(sd => MergedData(sd.uniqueId, ld.information)))
  }

如果这不是你要找的,那么也许你可以更具体一点。

于 2021-05-10T05:50:42.550 回答