Как проанализировать None, полученный для значения Map вместе с вызовом функции? - PullRequest
1 голос
/ 19 июня 2019

Первоначально я написал метод для анализа логических значений различных метрик и интересовался только получением true и false.Поэтому я использовал fold для работы со значением непустого параметра.

    def parseMetrics(metricKeys: Seq[String], metricsMap: mutable.Map[String, lang.Boolean],
                   transactionValue: String): List[String] = {
    metricKeys.map { metricKey =>
      metricsMap.get(metricKey).fold(StringUtils.EMPTY) { metricValue =>
        if (metricValue) "Y" else "N"
      }
    }.toList
  }

Теперь я решил изменить логику, чтобы использовать случай, когда значение метрики равно нулю и metricsMap.get(metricKey) возвращает None

// псевдокод

val maybeBoolean = metricsMap.get(metricKey)
case Some(maybeBoolean) - evaluate metricValue to "Y" or "N" as before
case None && isValidTransaction(transactionValue) then metricValue = "V"

Но я, вероятно, что-то упускаю, и в этом случае сопоставление с образцом не работает.Функция isValidTransaction(transactionValue) не может быть решена.И моя попытка сопоставить None и вызов функции не удалась.

Как мне исправить логику, чтобы она работала правильно?

1 Ответ

4 голосов
/ 19 июня 2019

Попробуйте

def parseMetrics(metricKeys: Seq[String], metricsMap: Map[String, Boolean], transactionValue: String): List[String] = {
  metricKeys.map(metricsMap.get).map {
    case Some(true) => "Y"
    case Some(false) => "N"
    case None if isValidTransaction(transactionValue) => "V"
    case None => "unknown"
  }.toList
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...