2014-06-13 31 views
5

request.body.asFormUrlEncoded'un deviceId içerip içermediğini bilmek istiyorum. aradığınız gibiSeçenek'den nasıl bilinir [Map [String, Seq [String]]] anahtar içeriyor mu değil mi?

val formValues=request.body.asFormUrlEncoded 
val number = formValues.get("mobile").head 
var deviceId ="deviceIdNotFound" 
if(condtion) //thats the problem 
deviceId= formValues.get("deviceId").head 

sözdizimi son derece olduğu için şiddetle kısmen formValues.get("whatever") kullanmamayı teşvik ediyorum conatins herhangi bir yolu veya Option[Map[String,Seq[String]]]

cevap

10

için başka işlevi yoktur kafa karıştırıcı-görünüyor get anahtar argümanıyla (örneğin bir haritada olduğu gibi), Option (güvenli olmayan bir işlem olan get üzerinde get temelde her zaman temelde kalmanız gerekir) get ve sonuçta elde edilen harita üzerinde apply ayrıca güvensiz). Bu su birikintisi Scala'nın suçu, senin değil, ama yine de içine girmekten kaçınmak istiyorsun.

Bunun yerine, Option üzerinde exists numaralarını contains ile birlikte kullanabilirsiniz. Option boş olmayan ve o anahtara sahip içeren harita yalnızca

val containsKey = formValues.exists(_.contains(key)) 

Bu true döndürür: Burada biraz basitleştirilmiş bir örnek.

Daha iyi bir yaklaşım böyle if -Bildirim kaçınmaktır: Burada

val os: Option[Seq[String]] = for { 
    m <- formValues 
    v <- m.get(key) 
} yield v 

os.foreach { v => \\ do something with the value } 

biz değer içeren bir Option ile bitirmek sivri orijinal Option boş olmayan ve eğer key tarafından harita bu anahtarı içerir.

İlgili konular