Jeśli bardzo chcesz rzucać wyjątek to po prostu zrób isoCountryIsoCodeMap("argentina")
. Jak nie znajdzie klucza to rzuci NoSuchElementException
.
To by było OK gdyby rzucał którego elementu nie znalazł.
Możesz do tego podejść albo poprzez rzucanie wyjątków, albo poprzez stworzenie struktur, które będą odpowiednio reprezentowały to co chcesz uzyskać (oczywiście pod warunkiem, że ten optional jest nie do przyjęcia), pi razy drzwi:
sealed trait IsoCodeRetrievalStatus extends Product with Serializable
final case class IsoCodeRetrieved(isoCode: String) extends IsoCodeRetrievalStatus
final case class IsoCodeMissing(isoCountry: String) extends IsoCodeRetrievalStatus
val x: IsoCodeRetrievalStatus = isoCountryIsoCodeMap.get("argentina").fold[IsoCodeRetrievalStatus](IsoCodeMissing("argentina")(isoCode => IsoCodeRetrieved(isoCode))
Wtedy, jak już będziesz musiał się dowiedzieć czy się udało czy nie to możesz zrobić pattern matching:
x match {
case IsoCodeRetrieved(isoCode) => ???
case IsoCodeMissing(isoCountry) =>
log.error("Missing ISO code for country: {}", isoCountry)
???
}