今天遇见两层map嵌套场景,定义方法名叫fromMap,方法中传入参数metrics中有两层map嵌套,处理方法就是两次循环,scala写的不是很熟,记录一下~
def fromMap(timestamp: Instant,
metrics: Map[SingleDatesetDescription, Map[SingleMetricDescriptor, MetricValue]])
入参有时间戳:timestamp,两个样例类SingleDatesetDescription和SingleMetricDescriptor,和MetricValue值,要得到这四个参数就得定义一个返回的样例类接收
case class ResultDocument(
timestamp: Instant,
datasourceDescription: SingleDatesetDescription,
metricDescriptor: SingleMetricDescriptor,
metricValue: MetricValue
)
获取的核心逻辑就是先对外面一层的Map循环,再对里面一层的Map循环。
第一层的Map中,可以先将后面一层的Map看成一个整体,取个别名叫metricsMap,然后再对 metricsMap处理。
最后用yield关键字,接收循环数据到样例类中。
def fromMap(timestamp: Instant,
metrics: Map[SingleDatesetDescription, Map[SingleMetricDescriptor, MetricValue]]
): List[EsMetricsDocument] = {
(for {
(datasetDescription, metricsMap) <- metrics
(metricDescriptor, metricValue) <- metricsMap
} yield ResultDocument(
timestamp,
datasetDescription,
metricDescriptor,
metricValue
)).toList
}