Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Scala中映射整个列表_Scala_Scala Collections - Fatal编程技术网

在Scala中映射整个列表

在Scala中映射整个列表,scala,scala-collections,Scala,Scala Collections,我希望能像这样做smth List(1, 2, 3).someFunc?(list => List(list, list)) // List(List(1,2,3), List(1,2,3)) 一般的想法是我希望smth像map,但不是作用于列表的元素,而是作用于整个列表本身。另一种方法是这样编写smth: val list = List(1, 2, 3) val res = List(list, list) 但是我想要一些可以用在链条上的函数。有这样的函数吗 编辑: 理想情况下,我希

我希望能像这样做smth

List(1, 2, 3).someFunc?(list => List(list, list)) // List(List(1,2,3), List(1,2,3))
一般的想法是我希望smth像
map
,但不是作用于列表的元素,而是作用于整个列表本身。另一种方法是这样编写smth:

val list = List(1, 2, 3)
val res = List(list, list)
但是我想要一些可以用在链条上的函数。有这样的函数吗

编辑: 理想情况下,我希望在元素和整个列表的这种“类型的映射”之间切换,例如

 List(1, 2, 3).map(_ + 1).someFunc?(list => List(list, list))

我认为一个选项非常适合您的需要:

Option(List(1, 2, 3)).map(lst => List(lst, lst))

你也可以考虑流:

Stream.continually(List(1, 2, 3)).take(2).toList

然后,您可以根据需要映射此列表。

您可以轻松定义自己的运算符:

implicit class RichList[T](l: List[T]){
  def applyFun[U](f: List[T] => U): U = f(l)
}

您甚至可以对可以应用的函数的输出类型添加一些限制,例如,如果您想确保输出仍然是一个列表(只需将
U
替换为
list[U]
,作为
f
的输出和
applyFun[U]
)的输出。我认为您可以在这里使用模式匹配:

List(1, 2, 3) match { case x => List(x, x) }
// res25: List[List[Int]] = List(List(1, 2, 3), List(1, 2, 3))

.map
应用于数据结构中的每个元素,而不是数据结构本身。如果要将函数应用于值,为什么不使用“普通”
fun(value)
?仅为了进行这种转换,在另一个Monad中包装列表对我来说似乎是一种过火的行为。不提这个事实,在这种情况下,很难从所有答案中映射出这个列表的元素(理想情况下,我希望这些元素可以互换),这一点对我来说似乎是最实际的。虽然我希望列表中有一些内置的方法来实现这一点,但这并不是列表的特性所特有的,你只需要在对象上应用一个函数(这里是一个列表,但它可以是任何东西),使用后缀符号。是的,我的意思是说,如果这已经是scala.lang的一个特性,那就不是很酷了,而不是我需要编写这个隐式类