如何将此地图/平面图转换为便于理解的图形,请解释其工作原理,谢谢。
def compute2(maybeFoo: Option[Foo]): Option[Int] =
maybeFoo.flatMap { foo =>
foo.bar.flatMap { bar =>
bar.baz.map { baz =>
baz.compute
}
}
}
您的代码可以翻译成这样:
def compute2(maybeFoo: Option[Foo]): Option[Int] =
for {
foo <- maybeFoo
bar <- foo.bar
baz <- bar.baz
} yield baz.compute
引用自Scgraming in Scala,第二版:
通常,for表达式的形式为:
for ( seq ) yield expr
这里,seq是一系列生成器、定义和过滤器,在连续元素之间带有分号。
这个for表达式包含一个生成器、一个定义和一个过滤器:
for {
p <- persons // a generator
n = p.name // a definition
if (n startsWith "To") // a filter
} yield n
使用一个生成器翻译表达式
首先,假设您有一个简单的表达式:
for (x <- expr1) yield expr2
其中x是一个变量。这样的表达式被翻译为:
expr1.map(x => expr2)
翻译以生成器和过滤器开头的表达式
现在,考虑将前导生成器与其他一些元素结合在一起的表达式。A用于表单的表达式:
for (x <- expr1 if expr2) yield expr3
被翻译成:
expr1 withFilter (x => expr2) map (x => expr3)
从两个生成器开始的表达式的翻译
下一个案例处理以两个生成器开头的表达式,如:
for (x <- expr1; y <- expr2) yield expr3
上面的 for 表达式被转换为 flatMap 的应用程序:
expr1.flatMap(x => for (y <- expr2) yield expr3)
对于理解Scala中的以下代码段,什么是最好的(无需线性/回调、较少样板)形式?
我有一个java map:
我有这样一个代码: 你能帮我完成代码库吗?
这是我的代码 上面的代码给出了 如果我将用于理解的屈服值更改为则结果为 如果我将更改为
我有一个带有对象的数组()。对象包含一个 orgId 和一个 orgName。 有没有一种简便的方法可以将它转换成< code>Map[Long,String] (orgId,orgName)
问题内容: 如何转换 为? 这不起作用: 问题答案: 如果您只包含,则可以这样操作: 如果不是,则可以替换 为。