У меня есть набор строк и его использование в качестве ключевых значений для получения JValues из карты:
val keys: Set[String] = Set("Metric_1", "Metric_2", "Metric_3", "Metric_4")
val logData: Map[String, JValue] = Map("Metric_1" -> JInt(0), "Metric_2" -> JInt(1), "Metric_3" -> null)
В приведенном ниже методе я анализирую значения для каждой метрики.Сначала получают все значения, затем фильтруют, чтобы избавиться от нулевых значений, а затем преобразуют существующие значения в логические значения.
val metricsMap: Map[String, Boolean] = keys
.map(k => k -> logData(k).extractOpt[Int]).toMap
.filter(_._2.isDefined)
.collect {
case (str, Some(0)) => str -> false
case (str, Some(1)) => str -> true
}
Я столкнулся с проблемой, когда один из keys
не найден на карте logData
.Итак, я получаю java.util.NoSuchElementException: key not found: Metric_4
.
Здесь я использую extractOpt
для извлечения значения из JSON и не нуждаюсь в значениях по умолчанию.Так что, вероятно, extractOrElse
не поможет, поскольку мне нужно только получить значения для существующих ключей и пропустить несуществующие ключи.
Что может быть правильным подходом для обработки случая, когда ключ отсутствует вlogData
Карта?
UPD: Я достиг желаемого результата на .map(k => k -> apiData.getOrElse(k, null).extractOpt[Int]).toMap
.Однако все еще не уверен, что это лучший подход.