jdk8 流操作


二、流

2.1 流介紹

流是Java API的新成員,它允許你以聲明性方式處理數據集合(通過查詢語句來表達,而不是臨時編寫一個實現)。就現在來說,你可以把它們看成遍歷數據集的高級迭代器。此外,流還可以透明地並行處理,你無需寫任何多線程代碼了!

2.2 使用流

類別 方法名 方法簽名 作用
篩選切片 filter Stream<T> filter(Predicate<? super T> predicate) 過濾操作,根據Predicate判斷結果保留為真的數據,返回結果仍然是流
  distinct Stream<T> distinct() 去重操作,篩選出不重復的結果,返回結果仍然是流
       
  limit Stream<T> limit(long maxSize) 截取限制操作,只取前 maxSize條數據,返回結果仍然是流
       
  skip Stream<T> skip(long n) 跳過操作,跳過n條數據,取后面的數據,返回結果仍然是流
       
映射 map <R> Stream<R> map(Function<? super T, ? extends R> mapper) 轉化操作,根據參數T,轉化成R類型,返回結果仍然是流
  flatMap <R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper) 轉化操作,根據參數T,轉化成R類型流,這里會生成多個R類型流,返回結果仍然是流
       
匹配 anyMatch boolean anyMatch(Predicate<? super T> predicate) 判斷是否有一條匹配,根據Predicate判斷結果中是否有一條匹配成功
  allMatch boolean allMatch(Predicate<? super T> predicate) 判斷是否全都匹配,根據Predicate判斷結果中是否全部匹配成功
       
  noneMatch boolean noneMatch(Predicate<? super T> predicate) 判斷是否一條都不匹配,根據Predicate判斷結果中是否所有的都不匹配
       
查找 findAny Optional<T> findAny() 查找操作, 查詢當前流中的任意元素並返回Optional
  findFirst Optional<T> findFirst() 查找操作, 查詢當前流中的第一個元素並返回Optional
       
歸約 reduce T reduce(T identity, BinaryOperator<T> accumulator); 歸約操作,同樣兩個類型的數據進行操作后返回相同類型的結果。比如兩個整數相加、相乘等。
  max Optional<T> max(Comparator<? super T> comparator) 求最大值,根據Comparator計算的比較結果得到最大值
       
  min Optional<T> min(Comparator<? super T> comparator) 求最小值,根據Comparator計算的比較結果得到最小值
       
匯總統計 collect <R, A> R collect(Collector<? super T, A, R> collector) 匯總操作,匯總對應的處理結果。這里經常與
  count long count() 統計流中數據數量
       
遍歷 foreach void forEach(Consumer<? super T> action) 遍歷操作,遍歷執行Consumer 對應的操作

上面是Stream API的一些常用操作,按場景結合lambda表達式調用對應方法即可。至於Stream的生成方式,Stream的of方法或者Collection接口實現類的stream方法都可以獲得對應的流對象,再進一步根據需要做對應處理。

另外上述方法如果返回是Stream對象時是可以鏈式調用的,這個時候這個操作只是聲明或者配方,不產生新的集合,這種類型的方法是惰性求值方法;有些方法返回結果非Stream類型,則是及早求值方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM