2017-09-06 40 views
0

當然,我可以通過在過濾器或映射函數之後提取列表來打破該代碼並打印大小。但爲了學習,我想知道是否有更好的解決方案,我可以保持此功能鏈接。有沒有在scala中打印函數鏈接的列表大小的方法?

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

+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 

關於提取臨時結果的第一個建議要好得多,因爲您可以在整個計算之後或之前完成的副作用。

+0

酷!這就是我一直在尋找的。我將其擴展了一點,所以我可以改變過濾器過程並注入打印部分: '隱式類FilterWithLog [T](xs:Set [T]){def filterEntities(filter:T => Boolean)= { val filteredEntities = xs.filter(過濾器) 的println(S 「實體數下降從$ {} xs.size爲$ {} filteredEntities.size」) } }' 但是,它看起來像過度設計等等,是的,我會留下原始的臨時結果提取解決方案。這只是我的學習曲線所需要的。 – csmarton