Lambda雜記

       流表面看起來和集合類似
       1.流並不存儲其元素,這些元素可能存儲在底層的集合中,或者按需生成
       2.流的操作不會修改其數據源
       3.流的操作是儘可能的惰性執行,意味着直至需要結果時,操作纔會執行。

       操作流時的典型流程
       1.創建一個流
       2.指定將初始流轉換爲其他流的中間操作,可能包含多個步驟
       3.應用終止操作,從而產生結果。這個操作會強制執行之前的惰性操作。

       Stream(),parallelStream(),產生當前集合所有元素的順序流或者並行流

       流的轉換會產生一個新的流,它的元素派生於另一個流中的元素,

       Filter 產生一個流,包含當前流中所有滿足斷言條件的元素。
       Map產生一個流,應用於當前流中所有元素所產生的的結果
       FlatMap <Function<? super T,? extends Stream<? extends R>> mapper>
       通過將mapper應用於當前流中所有元素產生的結果連接到一起而獲得的。

       調用stream.limit會返回一個新的流,在n個元素之後結束。對於裁剪無限流的尺寸非常有用
       Stream randoms = Stream.generate(Math::random).limit(100);
       會產生一個包含100個隨機數的流
       Stream.skip(n)正好相反,會丟棄前n個元素

       可以使用concat方法將兩個流連接起來
       Stream combined = Stream.concat(letter(“Hello”), letter(“World”));

       Diatinct會返回一個流,剔除重複元素按順序產生,

       流的排序
       Stream long = words.stream().sorted(Compartator.comparing(String::length).reversed());
       最長的字符串排在最前面

       Count 會返回流中元素的數量
       Max和min 返回最大值和最小值。返回的是一樂類型Optional的值
       FindFirst返回的是非空集合中的第一個值

       OPtional start = words.filter(s -> s.startsWith(“Q”)).findFirst;
       找到第一個以Q開頭的單詞

       不強調第一個匹配,任意一個匹配都可以,就使用findAny方法

       只想知道是否匹配使用anyMatch。
       所有元素 allMatch
       沒有任何元素 noneMatch
       這3個都是boolean類型,返回true,終端操作,

       Optional類型
       Optional對象是一種包裝器對象,要麼包裝了類型T的對象,要麼沒有包裝任何對象。

       result = noVowels().limit(10)
        .collect(Collectors.joining(", "));
       joining的作用就是加分隔符。

       Long getCount() 產生彙總後的元素個數
       getSum(),Getaverage()產生彙總後的元素的總合或者平均值,或者在沒有任何元素時返回0
       getMax(),getMin(),獲得彙總的最大值和最小值。

       GroupingBy產生一個蒐集器。
       Counting會對產生蒐集到的元素個數。
       Map<String, Long> Counts = locales.collect(groupingBy(Locale::getCountry,counting()));

       maxBy和minBy會接受一個比較器,併產生下游元素中的最大值或最小值
       Map<String,Optional> stateTo =        cities.collect(groupingBy(City::getState,MaxBy(Comparator.comparing(City::getPopulation()))));
       這個可以產生每個州最大的城市。

       Reduce 方法是一種用於從流中計算某個值的通用機制,
       Optional sum = values.stream().reduce((x,y) ->x + y);
       當你有一個對象流的時候,可以使用mapToInt,mapToLong和mapToDouble將其轉換爲基本類型。

       Range(),rangeClosed(),產生一個由給定範圍內的整數構成的XXXStream。

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