我希望能够像这样做
List(1, 2, 3).someFunc?(list => List(list, list)) // List(List(1,2,3), List(1,2,3))
一般的想法是我想要像map
那样的smth,但不是在列表的元素上,而是在整个列表本身上。另一种方法是写这样的smth:
val list = List(1, 2, 3)
val res = List(list, list)
但是我想要一些可以在链中使用的功能。有这样的功能吗?
编辑: 理想情况下,我希望将地图链接到元素和这种"类型的地图"对于整个列表可以互换,例如
List(1, 2, 3).map(_ + 1).someFunc?(list => List(list, list))
答案 0 :(得分:2)
您可以轻松定义自己的运算符:
implicit class RichList[T](l: List[T]){
def applyFun[U](f: List[T] => U): U = f(l)
}
您甚至可以对可应用的函数的输出类型添加一些限制,例如,如果您想确保输出仍然是列表(只需将U
替换为List[U]
as f
的输出和applyFun[U]
的输出。)
答案 1 :(得分:1)
我认为一个选项很适合您的需求:
Option(List(1, 2, 3)).map(lst => List(lst, lst))
您可能还想考虑视频流:
Stream.continually(List(1, 2, 3)).take(2).toList
然后,您可以根据需要映射此列表列表。
答案 2 :(得分:1)
我认为你可以在这里使用模式匹配:
List(1, 2, 3) match { case x => List(x, x) }
// res25: List[List[Int]] = List(List(1, 2, 3), List(1, 2, 3))