我需要修復此語句,因爲它沒有使用使用Option的.get方法。如何處理查看和檢查值的地圖
if(!map.contains(myKey) ||
map(myKey) == file.getTimestamp.getTime.toString) {
..
}
我想做的查詢使用正確的方法:
map.get(myKey)
但我不能得到正確的語法。
我需要修復此語句,因爲它沒有使用使用Option的.get方法。如何處理查看和檢查值的地圖
if(!map.contains(myKey) ||
map(myKey) == file.getTimestamp.getTime.toString) {
..
}
我想做的查詢使用正確的方法:
map.get(myKey)
但我不能得到正確的語法。
你可以使用map
:
map.get(myKey).map(_ == file.getTimestamp.getTime.toString)
map
應用一個函數的Option
並返回另一個Option
。在上面的代碼,map
應用功能_ == file.getTimestamp.getTime.toString
到map.get(myKey)
結果:
map.get(myKey)
是Some
,爲myKey
意思是值存在於地圖上,然後我們檢查值是否等於file.getTimestamp.getTime.toString
。如果該值等於該字符串,則返回Some(true)
;否則我們會返回一個Some(false)
。map.get(myKey)
是None
,意思是地圖中不存在myKey
的值,則返回None
。下面的模式匹配說明了一種方法來提取的方式map
操作的結果是在你的問題if
說法一致:
map.get(myKey).map(_ == file.getTimestamp.getTime.toString) match {
case None | Some(true) => ...
case _ => ...
}
@ YuvalItzchakov在另一個答案評論使用getOrElse
調用map
後:
map.get(myKey).map(_ == file.getTimestamp.getTime.toString).getOrElse(true)
這是怎麼getOrElse
作品:
map
操作的結果是一個Some
,則返回Some
的值。因此返回true
或false
。map
操作的結果是None
,則返回傳遞給getOrElse
的默認值 - 在本例中爲true
- 。如果您選擇使用map
來解決你的問題,我會去與@YuvalItzchakov提供了getOrElse
方法。
儘管這段代碼可能會回答這個問題,但提供額外的[context ](https://meta.stackexchange.com/q/114762)關於_how_和/或_why_它解決了這個問題會提高答案的長期價值。請記住,你正在爲將來的讀者回答這個問題,而不僅僅是現在問的人!請編輯您的答案以添加解釋,並指出適用的限制和假設。它也不會提到爲什麼這個答案比其他答案更合適。 –