我需要修复此声明,因为它没有使用使用该选项的.get方法。
if(!map.contains(myKey) ||
map(myKey) == file.getTimestamp.getTime.toString) {
..
}
我想使用以下方法以正确的方式进行查找:
map.get(myKey)
但我无法正确理解语法。
答案 0 :(得分:2)
我认为这实现了你追求的逻辑。
if (map.get(myKey).fold(true)(_ == file.getTimestamp.getTime.toString) {
...
}
使用fold
解包Option
并为Some
和None
提供不同的分支。
答案 1 :(得分:1)
您可以使用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在另一个回答中的评论在致电map
后使用getOrElse
:
map.get(myKey).map(_ == file.getTimestamp.getTime.toString).getOrElse(true)
这就是getOrElse
的工作原理:
map
操作的结果是Some
,则返回Some
的值。因此,返回true
或false
。map
操作的结果是None
,则会返回传递给getOrElse
的默认值 - 在本例中为true
- 如果您选择使用map
来解决问题,我会采用@YuvalItzchakov提供的getOrElse
方法。