java8 新特性-流式操作
阿新 • • 發佈:2019-01-03
一. 流式處理簡介
在我接觸到java8流式處理的時候,我的第一感覺是流式處理讓集合操作變得簡潔了許多,通常我們需要多行程式碼才能完成的操作,藉助於流式處理可以在一行中實現。比如我們希望對一個包含字串的集合中篩選出所有包含指定字串的元素,並將其封裝成為一個新的List返回,那麼在java8之前,我們需要通過如下程式碼實現:
List<String> list = new ArrayList<>();
for (String i : targets) {
if (i.contains("wang")) {
list.add(i);
}
}
通過java8的流式處理,我們可以將程式碼簡化為:
List<String> list=targets.stream()
.filter(p->p.contains("wang"))
.collect(Collectors.toList();
先簡單解釋一下上面這行語句的含義,stream()操作將集合轉換成一個流,filter()執行我們自定義的篩選處理,這裡是通過lambda表示式篩選出指定元素,最後我們通過collect()對結果進行封裝處理,並通過Collectors.toList()指定其封裝成為一個List集合返回。
由上面的例子可以看出,java8的流式處理極大的簡化了對於集合的操作,實際上不光是集合,包括陣列、檔案等,只要是可以轉換成流,我們都可以藉助流式處理,類似於我們寫SQL語句一樣對其進行操作。java8通過內部迭代來實現對流的處理,一個流式處理可以分為三個部分:轉換成流、中間操作、終端操作。如下圖: