【发布时间】:2021-05-27 02:21:29
【问题描述】:
我有以下案例类:
case class AgeDiff(serviceLocation: ServiceLocation, daysBehind: Option[Long])
case class ServiceLocation(
environment: String,
service: String,
pool: String,
region: String
)
我有一个List[AgeDiff]
对于serviceLocation,此列表中只有两种可能的环境
QA & Prod
列表的示例可能是:
val ageDiffList = List(
AgeDiff(
ServiceLocation("qa", "a-service", "poolC", "us-west-4"),
Some(6)
),
AgeDiff(
ServiceLocation("prod", "a-service", "poolC", "us-west-4"),
Some(7)
),AgeDiff(
ServiceLocation("qa", "b-service", "poolC", "us-west-4"),
Some(8)
),
AgeDiff(
ServiceLocation("prod", "b-service", "poolC", "us-west-4"),
Some(10)
)
)
我想返回一个新的List[AgeDiff],我从所有在prod 中具有serviceLocation 的AgeDiff 中减去serviceLocation 在qa 中的serviceLocation
例如,当列表减法发生时,它将如下所示:
val ageDiffList = List(
AgeDiff(
ServiceLocation("qa", "a-service", "poolC", "us-west-4"),
Some(6)
),
AgeDiff(
ServiceLocation("prod", "a-service", "poolC", "us-west-4"),
Some(1)
),AgeDiff(
ServiceLocation("qa", "b-service", "poolC", "us-west-4"),
Some(8)
),
AgeDiff(
ServiceLocation("prod", "b-service", "poolC", "us-west-4"),
Some(2)
)
)
条件是:
- 我想对同一个
pool的AgeDiffs做减法,region,service.
例如:
AgeDiff(
ServiceLocation("qa", "a-service", "poolC", "us-west-4"),
Some(6)
),
AgeDiff(
ServiceLocation("prod", "a-service", "poolC", "us-west-4"),
Some(7)
)
不是
AgeDiff(
ServiceLocation("qa", "a-service", "poolC", "us-west-4"),
Some(6)
),
AgeDiff(
ServiceLocation("prod", "b-service", "poolC", "us-west-4"),
Some(7)
)
- 如果同一服务中的天数不同, 不要减去
例如:
AgeDiff(
ServiceLocation("qa", "a-service", "poolb", "us-west-3"),
Some(6)
),
AgeDiff(
ServiceLocation("prod", "a-service", "poolC", "us-west-4"),
Some(7)
)
除非他们有相同的游泳池、地区和服务,或者他们落后比赛几天,否则他们可能会被折叠。但是,服务名称必须相同才能减去。
- 如果
daysBehind是None则不要比较并保持原样
【问题讨论】:
-
因此,如果列表只有
environment值"qa",或者如果列表具有所有唯一的service值,则不会有任何变化。对吗? -
是的,没错
-
如果列表以
"qa"条目开头,后跟7 个匹配的"prod"条目,减法会发生一次(第一个"prod")还是7 次? -
7 次,因为区域可能不同,它们也可以包含不同的
daysBehind值。 -
如果
daysBehind中有Nones怎么办?