Scala 需要合并具有相同日期的地图和列表
我有一个映射,其中key=LocalDateTime,value=GroupScala 需要合并具有相同日期的地图和列表,scala,Scala,我有一个映射,其中key=LocalDateTime,value=Group def someGroup(/.../): List[Group] = { someCode.map { /.../ }.map(group => (group.completedDt, group)).toMap /.../ } 还有List[Group],其中Group(completedDt:LocalDateTime,cost:Int)总是cost=0 我所拥有的一个例子
def someGroup(/.../): List[Group] = {
someCode.map {
/.../
}.map(group => (group.completedDt, group)).toMap
/.../
}
还有List[Group],其中Group(completedDt:LocalDateTime,cost:Int)总是cost=0
我所拥有的一个例子:
地图:[(2021-04-01T00:00:00.000500),(2021-04-03T00:00:00.0001000),(2021-04-05T00:00:00.000750)]
列表:((2021-04-01T00:00:00.000,0),(2021-04-02T00:00:00.000,0),(2021-04-03T00:00:00.000,0),(2021-04-04T00:00:00.000,0),(2021-04-05T00:00:00.000,0))
预期结果是:
列表((2021-04-01T00:00:00.000,500),(2021-04-02T00:00:00.000,0),(2021-04-03T00:00:00.000,1000),(2021-04-04T00:00:00.000,0),(2021-04-05T00:00:00.000,750))
提前谢谢 假设如果两者都出现了一段时间,您希望合并成本:
type Group = (LocalDateTime, Int) // completedDt, cost
val groupMap: Map[LocalDateTime, Group] = ???
val groupList: List[Group] = ???
val combined =
groupList.foldLeft(groupMap) { (acc, group) =>
val completedDt = group._1
if (acc.contains(completedDt)) {
val nv = completedDt -> (acc(completedDt)._2 + group._2)
acc.updated(completedDt, nv)
} else acc + (completedDt -> group)
}.values.toList.sortBy(_._1) // You might need to define an Ordering[LocalDateTime]
你问题中的符号使我认为组
只是一对,而不是案例类
。还值得注意的是,我不确定地图是map[LocalDateTime,Group]
还是map[LocalDateTime,Int]
(根据定义,一组Group
)能为您带来什么
编辑:如果您有组的集合的常规集合,则可以
val groupLists: List[List[Group]] = ???
groupList.foldLeft(Map.empty[LocalDateTime, Group]) { (acc, lst) =>
lst.foldLeft(acc) { (m, group) =>
val completedDt = group._1
if (m.contains(completedDt)) {
val nv = completedDt -> (acc(completedDt)._2 + group._2)
m.updated(completedDt, nv)
} else m + (completedDt -> group)
}
}.values.toList.sortBy(_._2)
你好谢谢你的回复!如果我们有两个列表,而不是一个有列表的地图,会怎么样?