JAVA 8 Stream小計

import staticjava

靜態導入,方便使用;常常要導入的數組

java.util.stream.Collectors.toList

filter函數

接受Lambda,從流中 除某些元素code


mapip

接受一個Lambda,這個函數會被應用到每一個元素上,並將其映 射成一個新的元素get


limit數學

截斷流,使其元素不 過給定數量hash


countit

返回流中元素的個數。 collect 將流轉換爲其餘形式。io


forEach

消費流中的每一個元素並對其應用Lambda


請注意,和迭代器相似,流只能遍歷一次。遍歷完以後,咱們就說這個流已經被消費掉了


distinct

返回一個元素各異(根據流所生成元素的hashCode和equals方法實現)的流


skip


Arrays.stream()

能夠接受 一個數組並 生一個流

String[] arrayOfWords = {"Goodbye", "World"}; 
Stream<String> streamOfwords = Arrays.stream(arrayOfWords);
words.stream()
     .map(word -> word.split(""))
     .map(Arrays::stream)//讓每一個數組變成一個單獨的流 
     .distinct()
     .collect(toList());

flatMap

把一個流中的每一個值都換成另外一個流,而後把全部的流 接 起來成爲一個流。

List<String> uniqueCharacters =
    words.stream()
         .map(w -> w.split(""))
         .flatMap(Arrays::stream)
         .distinct()
         .collect(Collectors.toList());

anyMatch

「流中是否有一個元素能 配給定的謂詞」

if(menu.stream().anyMatch(Dish::isVegetarian)){
    System.out.println("The menu is (somewhat) vegetarian friendly!!");
}

allMatch

但它會看看流中的元素是否都能匹配給定的謂詞

boolean isHealthy = menu.stream()
                            .allMatch(d -> d.getCalories() < 1000);
//全部菜的熱量都低於1000卡路里

noneMatch

它能夠確保流中沒有任何元素與給定的謂詞匹配

boolean isHealthy = menu.stream()
                            .noneMatch(d -> d.getCalories() >= 1000);

findAny

將返回當前流中的任意元素。

Optional<Dish> dish =
        menu.stream()
            .filter(Dish::isVegetarian)
            .findAny();

findFirst

找到第一個元素

List<Integer> someNumbers = Arrays.asList(1, 2, 3, 4, 5);
Optional<Integer> firstSquareDivisibleByThree =
    someNumbers.stream()
                .map(x -> x * x)
                .filter(x -> x % 3 == 0)
                .findFirst(); // 9

reduce歸約

reduce接受兩個參數:

  • 一個初始值,這裏是0;

  • 一個BinaryOperator<T>來將兩個元素結合起來 生一個新值

int product = numbers.stream().reduce(1, (a, b) -> a * b);

max&min

//max
Optional<Integer> max = numbers.stream().reduce(Integer::max);
//min
Optional<Integer> min = numbers.stream().reduce(Integer::min);

將流轉換爲特化版本的經常使用方法是mapToInt、mapToDouble和mapToLong。

int calories = menu.stream()
                    .mapToInt(Dish::getCalories)//返回一個IntStrean
                    .sum();

IntStream還支持其餘的方便方法,如max、min、average等。

Optional

Optional<T>類(java.util.Optional)是一個容器類,表明一個值存在或不存在。


數值範圍

IntStream和LongStream的靜態方法,幫助生成這種範 : range和rangeClosed。這兩個方法都是第一個參數接受起始值,第二個參數接受結束值。相似與數學中的( ] rangeClosed 和[ ) range


empty

獲得一個空流

Stream<String> emptyStream = Stream.empty();

數組建立流

使用靜態方法Arrays.stream從數組建立一個流

int[] numbers = {2, 3, 5, 7, 11, 13}; int sum = Arrays.stream(numbers).sum();
相關文章
相關標籤/搜索