在scala中是否有一种方法可以在函数链接之间打印列表的大小?

时间:2017-09-06 11:27:54

标签: scala functional-programming

当然,我可以通过在过滤器或地图功能之后提取列表来打破此代码并打印大小。但是为了学习,我想知道是否有一个更好的解决方案,我可以保持这个功能链接。

listOfSomething.filter(condition).map(e => e.mapToSomeOther).mkString(DELIMITER)

1 个答案:

答案 0 :(得分:0)

对于具有副作用的不可变序列,没有任何方法,但是您可以使用副作用方法(我不建议这样做)来丰富API,如下所示:

scala> implicit class PrintSize[T](xs: List[T]){ def printSize = { println(xs.size); xs} }
defined class PrintSize

scala> List(1, 2, 3, 4, 5, 6, 7).filter(_ > 3).printSize.map(_ * 2).mkString(",")
4
res2: String = 8,10,12,14

关于提取临时结果的第一个建议要好得多,因为你可以在整个计算之后或之前做的副作用