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<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();