有没有更好的方法来编写下面的代码?
val t = map.get('type).getOrElse("");
if (t != "") "prefix" + t;
Run Code Online (Sandbox Code Playgroud)
对内联代码感兴趣
val t = map.get('type).getOrElse("").????
Run Code Online (Sandbox Code Playgroud)
Tra*_*own 33
Map有自己的getOrElse方法,所以你可以写下面的内容:
val t = map.getOrElse('type, "")
Run Code Online (Sandbox Code Playgroud)
这与t第一个例子中的定义完成相同的事情.
解决您的注释:如果您知道您的地图永远不会将空字符串作为值包含,您可以使用以下内容添加"prefix":
map.get('type).map("prefix" + _).getOrElse("")
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用的是Scala 2.10:
map.get('type).fold("")("prefix" + _)
Run Code Online (Sandbox Code Playgroud)
如果您的地图可以包含""值,则此版本的行为与您的版本略有不同,因为它会为这些值添加前缀.如果您想要在单行中与您的版本完全相同的行为,您可以编写以下内容:
map.get('type).filter(_.nonEmpty).map("prefix" + _).getOrElse("")
Run Code Online (Sandbox Code Playgroud)
这可能不是必需的,但听起来你不希望你的地图中有空字符串.
还值得注意的是,在某些情况下,您可以.getOrElse用一次.withDefaultValue调用替换多个常见用法。
val map = complexMapCalculation().withDefaultValue("")
val t = map('type)
Run Code Online (Sandbox Code Playgroud)
我不会说这是每次都应该做的事情,但它可以很方便。
| 归档时间: |
|
| 查看次数: |
32380 次 |
| 最近记录: |