scala集合的一些高階操作
阿新 • • 發佈:2018-12-03
目錄
流
這個流(stream)操作是一個尾部懶計算的不可變列表,只有在需要它時,它才會計算。
上面展示了建立Stream,為Steam增加head,構造一個新的Stream,增加head使用“#::”符號,增加之後。
呼叫Stream的尾部看看,究竟能得到什麼
呼叫tail方法得到尾部Stream,相當於在原有Stream的基礎上,使尾部的第一個元素作為head其餘元素作為tail而建立了一個新的Stream。
流的方法是懶執行的,舉個栗子:
對Stream進行了map操作,依然是隻對head進行了操作,tail做了lazy處理
如果想得到Steam中的所有元素怎麼辦?force方法解決這個問題,還可以結合take方法,獲取制定個數的元素資訊
懶檢視
Stream的尾部是一個懶計算不可變的列表,如果其他集合也想有類似的功能怎麼辦呢?scala中提供了懶檢視這個概念,解決了這個問題。我們可以對其他集合使用view方法,產出一個其方法都是懶執行的集合。
上面是普通集合和檢視的對比,我們不難看對集合建立檢視類,這個類有兩個泛型,第一個就是集合所有元素對應的型別(如果元素型別不一致,那麼泛型對應的就是他們的超類),第二個泛型就是集合的型別。
這裡有一個注意點,那就是Stream只是尾巴懶,而view是全身上下都懶,所有元素都沒有被求值。
懶集合的使用,在處理需要多種方式變換的大型集合中是非常實用的,能夠避免構建中間集合,例如:
前者被呼叫時,對於每個元素,兩個操作同時進行,不產生中間集合;後者實用時,先map成一個求平方集合,再根據求平方集合構建乘10的集合。