我是Scala新手,并且对Stream.map()有疑问。我想要12名球员。为什么我不能这样做:
case class Player(number: Int)
Stream.range(1, 12, 1).map[Player](i => new Player(i))
使用map函数的正确方法是什么?
感谢您的帮助。
答案 0 :(得分:1)
尝试
Stream.range(1, 12, 1).map(i => Player(i))
或
Stream.range(1, 12, 1).map[Player, Stream[Player]](i => Player(i))
或
(Stream.range(1, 12, 1) : TraversableOnce[Int]).map[Player](i => Player(i))
答案 1 :(得分:1)
方法map
需要两个类型自变量(元素类型和返回的集合的类型,这可能以不平凡的方式取决于元素类型)。通常会省略两个参数。
您不需要new
来实例化案例类。实际上,Player
伴随对象Player
可以用作从Int
到Player
的函数。
应用这两个提示可为您提供:
Stream.range(1, 12).map(Player)
但是,对于具有固定数量元素的小型集合使用Stream
有点奇怪。 List
或Vector
在这里似乎更合适,因此您甚至可以尝试类似
1 to 12 map Player
如果您想知道map
为什么要使用两个类型的参数,下面是几个示例:
// return `Iterable` instead of `Stream`
Stream.range(1, 12).map[Player, Iterable[Player]](Player)
// return `Iterable` instead of `Stream` and `Any` instead of `Player`
Stream.range(1, 12).map[Player, Iterable[Any]](Player)
这将产生具有指定返回类型的值(例如Iterable[Player]
而不是Stream[Player]
)。因此,第二个类型参数可用于控制返回类型。通常,您不需要它,并且会自动返回适当的类型。