Java 8新特性(二)

來源:互聯網
上載者:User

標籤:

集合類的批處理:

        Java8除了Lambda運算式外還提供了另一個重要的特性,即集合的批處理操作,集合類的批處理操作API的目的是實現集合類的“內部迭代”,並期望充分利用現代多核CPU進行並行計算。Java8之前集合類的迭代(Iteration)都是外部的,即客戶代碼。而內部迭代意味著改由Java類庫來進行迭代,而不是客戶代碼。

        例如Java8以前版本要遍曆一個集合通常是:

for(Object o: list) {    System.out.println(o);}

        而在Java8中可以配合Lambda運算式:

list.forEach(o -> System.out.println(o));

        集合類中都有forEach方法,方法的參數是一個函數介面Consumer,這個函數式介面有一個accept()方法用來接受單個參數,在forEach方法實現中,accept()接受的參數即為每次遍曆集合得到的元素。forEach方法相對於以前的for迴圈來說也只是用了Lambda使代碼更簡潔了,但他卻是也是串列的操作每個元素,相對於for迴圈效能上並沒有提升,而之前所說的並存執行是由於集合中引入的Stream。

        在Java的文檔中給出的Stream定義是:

A sequence of elements supporting sequential and parallel aggregate operations.

意思是Stream是一個支援順序以及並發的集合處理操作的元素序列

        Stream介面在java.util.stream包下,主要的實現有IntStream、LongStream、DoubleStream等,Stream對象的建立主要有兩種方式:

  1. 通過Collection介面的預設方法stream()建立

  2. 通過Stream介面的靜態Factory 方法of()建立

        而Stream介面提供的方法也大致分為了兩類:

  1. 一類對原Stream元素進行篩選、變換、做處理等操作,最終返回一個處理後的新的Stream對象,可以鏈式調用用多個方法共同處理

  2. 一類是在得到處理後的新Stream後,用來擷取想要的非Stream類型結果,如集合、Stream元素中的最大值、過濾後剩餘的元素個數等

Stream部分我發現一個寫的很詳細的部落格,想要深入學習可以參考  http://ifeve.com/stream/


雙冒號的使用:

        Java8中新加了 ::這種操作符,用來傳遞方法或者構造方法的引用,這個特性主要是用來簡化Lambda運算式,如上面forEach方法的例子,可以簡化為:

list.forEach(System.out::println)

        要使用這種方法簡化Lambda也是有一些限制的,首先Lambda運算式代碼塊中的代碼必須是直接調用了另外的一個方法,並且方法的參數個數、順序以及類型都必須和對應介面中的抽象方法一致。同樣需要得到構造方法的引用,只需要String::new這樣,在類後面::new即可


Java 8新特性(二)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.