Lambda FAQ_17.Java的集合要去向何方

Java的集合要去向何方


在Java8發佈時Java集合框架已經超過15歲了,雖然它發展的很好,但是隨着Java語言運行環境的改變Java集合框架內在的一些假設慢慢變成了問題。最大的變化是在硬件環境,硬件設計者已經將他們的注意力從增加獨立核心的時鐘頻率上轉移到在一塊芯片上增加更多的核心。爲了從多核心上提升性能,應用必須能夠將它們的負荷分派到不同的線程上,每個線程都在獨自的核心上運行。庫的設計者需要將他們的注意力轉移到實現這種轉變的能力上來,因爲在許多Java程序中最集中的操作都是在操作集合元素,所以Java集合框架處於這種改變的中心位置。


對Java集合的使用進行分析發現有一種使用場景非常普遍,大部分操作都是從數據源(數組或者集合)中抽取數據,之後迭代集合元素進行類似過濾和映射的操作,最後在一個類似合計的操作中對元素進行合計。目前這種場景的操作需要創建一個臨時的集合來存儲轉換操作的中間結果。然而,這種處理方式可以轉換成使用衆所周知的“管道和過濾”(Pipes and Filter)的管道(pipeline)方式,這種方式有很大優勢:消除中間變量,減少中間存儲要求,懶執行(lazy evaluation),更多的靈活性和操作定義的可組合性。甚至,如果管道中每個操作都被恰當的定義,那麼管道作爲一個整體可以被自動並行處理(在多核環境中可被拆分爲並行處理)。Pipes角色,是作爲多個管道操作的連接器,Java8的類庫引入了這個概念並由Stream接口實現,查看Stram接口將會明白管道是如何工作的。


這是Java集合框架在Java8中的重要演變。這個演變使函數式編程更多的應用到集合處理中,用Stream接口中定義的方法替換當前的使用方式。


原文地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章