相关疑难解决方法(0)

当静态类型为Map时,Scala SortedMap.map方法返回未排序的映射

我在使用Scala的SortedMap [A​​,B]时遇到了一些未经授权的陌生感.如果我将SortedMap [A​​,B]"a"的引用声明为Map [A​​,B]类型,那么对"a"的映射操作将产生一个非有序映射实现.

例:

import scala.collection.immutable._

object Test extends App {
    val a: Map[String, String] = SortedMap[String, String]("a" -> "s", "b" -> "t", "c" -> "u", "d" -> "v", "e" -> "w", "f" -> "x")
    println(a.getClass+": "+a)

    val b = a map {x => x}  // identity
    println(b.getClass+": "+b)
}
Run Code Online (Sandbox Code Playgroud)

以上的输出是:

class scala.collection.immutable.TreeMap:Map(a - > s,b - > t,c - > u,d - > v,e - > w,f - > x)
class scala.collection.immutable.HashMap $ HashTrieMap:Map(e - > w,f - …

collections functional-programming scala sortedmap higher-order-functions

7
推荐指数
1
解决办法
1162
查看次数

返回相同的集合类型,参数化不同

Daniel Sobral展示了我们如何创建一个返回相同集合类型的方法,在这个问题的答案中调用它:在泛型方法中返回原始集合类型

是否可以对使用映射返回相同集合类型的不同参数化版本的方法执行相同操作?

例如

def foo[A](xs: GenTraversable[A]) = xs map (_.toString)
Run Code Online (Sandbox Code Playgroud)

foo( List(1, 2, 3) ) 回报 res: GenTraversable[String] = List(1, 2, 3)

可以这样调整吗?

foo( Set(1, 2, 3) ) 返回一个 Set[String]

foo( List(1, 2, 3) ) 返回一个 List[String]

foo( Vector(1, 2, 3) ) 返回一个 Vector[String]

generics collections scala scala-collections

4
推荐指数
1
解决办法
222
查看次数