要添加到@dth,如果需要列表,可以执行以下操作:
val l = Map(1->2,3->4).view.map( ... ).toList
在这里,map 函数应用于惰性的 IterableView
,该视图还输出一个 IterableView
,实际构造由 toList
触发。
注意:另外,不使用< code>view会导致危险的行为。示例:
val m = Map(2->2,3->3)
val l = m.map{ case (k,v) => (k/2,v) ).toList
// List((1,3))
val l = m.view.map{ case (k,v) => (k/2,v) ).toList
// List((1,2), (1,3))
这里省略了< code >。view使映射输出成为覆盖重复键的映射(并执行额外和不必要的工作)。
当您查看API文档了解map方法的详细信息时,您会发现它有第二个类型为的隐式参数CanBuildFrom
。CanBuildFrom的一个实例
from定义了当映射到某个其他集合时如何构建某个集合,并提供了某个元素类型。
在结果得到一个映射的情况下,您是在映射上进行映射,并提供二元元组。因此,编译器会搜索能够处理该问题的< code > CanBuildFrom -实例。
为了找到这样的实例,编译器在不同的地方寻找,例如,当前范围、调用方法的类a及其伴随对象。在这种情况下,它将在< code>Map的配套对象中找到一个名为< code>canBuildFrom的隐式字段,该字段适用于构建< code>Map作为结果。因此,它尝试将结果类型推断为< code>Map,并在成功时使用该实例。
在您提供单值或三元组的情况下,在Map
的伴侣中找到的实例没有所需的类型,因此它继续搜索继承树。它在Iterable
的伴侣对象中找到它。实例允许构建任意元素类型的Iterable
。所以编译器使用它。
那么,为什么会有一个列表
?因为这恰好是这里使用的实现,所以类型系统只保证<code>可迭代。
如果希望获得一个可迭代
而不是映射
,可以显式提供CanBuildFrom
(仅当您直接调用Map和flatMap时)实例,或者强制返回类型。在那里,您还会注意到,即使您得到了一个<code>列表,您也无法请求该列表。
这不会工作:
val l: List[Int] = Map(1->2).map(x=>3)
但是,这将:
val l: Iterable[Int] = Map(1->2).map(x=>3)
如何将此地图/平面图转换为便于理解的图形,请解释其工作原理,谢谢。
对于理解Scala中的以下代码段,什么是最好的(无需线性/回调、较少样板)形式?
问题内容: 我目前的理解非常模糊,我倾向于认为map是同步的,而flatMap是异步的,但是我真的无法解决它。 这是一个例子: 我有文件(a ),我想将其复制到服务器上的某些文件中。 本示例摘自一本书。 我可以将所有更改为to ,反之亦然,一切仍然正常。我不知道有什么区别。 问题答案: 用于同步,非阻塞,一对一转换 用于异步(非阻塞)1-to-N转换 区别在方法签名中可见: 取a 并返回a 取a
我已经找到了很多关于RxJava的答案,但我想了解它在Reactor中是如何工作的。 我目前的理解是非常模糊的,我倾向于认为map是同步的,flatMap是异步的,但我不能真正理解它。 以下是一个例子: 我有文件(a
请帮助理解我如何在我的例子中使用fkatMap(): 我看了留档。我知道如何工作,但我不明白我需要如何在我的例子中使用。谢谢。
在谷歌地图V2中有没有隐藏地图(使不可见)瓷砖的方法? 我想拥有地图(标记,信息窗口)的所有其他功能,但不是地图,我想有静态的背景图像。作为转机,我尝试使用瓷砖覆盖,但它是加载多个图像,而不是一个,仍然是加载第一个原始地图瓷砖。 谷歌地图V2有这样的选择吗?