參考:https://blog.csdn.net/y_k_y/article/details/84633001
一、概述
Stream 是 Java8 中處理集合的關(guān)鍵抽象概念,它可以指定你希望對集合進行的操作,可以執(zhí)行非常復(fù)雜的查找、過濾和映射數(shù)據(jù)等操作。使用Stream API 對集合數(shù)據(jù)進行操作,就類似于使用 SQL 執(zhí)行的數(shù)據(jù)庫查詢。也可以使用 Stream API 來并行執(zhí)行操作。簡而言之,Stream API 提供了一種高效且易于使用的處理數(shù)據(jù)的方式。
二、分類
stream操作分類 | ||
中間操作 | 無狀態(tài)(Statusless) | filter() ? ?map() ? mapToInt() ? mapToLong() ? mapToDouble()flatMap() ? flatMapToInt()flatMapToLong() ??flatMapToDouble()unordered() ? ?pee() |
有狀態(tài)(Statusful) | distinct() ? sorted() ? limit() ? skip() | |
結(jié)束操作 | 非短路操作 | foreach() ? ? ?forEachOrdered() ? ??toArray() ? ? ? toList() ? collect() ? ??max() ? min() ? ?count() |
短路操作 | anyMatch() ? allMatch() ? noneMatch()findFirst() ? findAny() |
?
解釋:
?無狀態(tài):指元素的處理不受之前元素的影響;
? ? ? 有狀態(tài):指該操作只有拿到所有元素之后才能繼續(xù)下去。
? ? ? 非短路操作:指必須處理所有元素才能得到最終結(jié)果;
? ? ?短路操作:指遇到某些符合條件的元素就可以得到最終結(jié)果,如 A || B,只要A為true,則無需判斷B的結(jié)果
?
三、具體用法
List<String> list=new ArrayList<>();// .stream()獲取一個順序流Stream<String> stream=list.stream();// .parallelStream()獲取一個并行流Stream<String> parallelStream=list.parallelStream();
String[] arr = {"1", "3", "2", "5", "1" };Stream<String> stream1=Arrays.stream(arr);
Stream<Integer> stream = Stream.of(1,2,3,4,5,6); Stream<Integer> stream2 = Stream.iterate(0, (x) -> x 2).limit(6);stream2.forEach(System.out::println); // 0 2 4 6 8 10 Stream<Double> stream3 = Stream.generate(Math::random).limit(2);stream3.forEach(System.out::println);
BufferedReader reader = new BufferedReader(new FileReader("F:\\test_stream.txt"));Stream<String> lineStream = reader.lines();lineStream.forEach(System.out::println);
Pattern pattern = Pattern.compile(",");Stream<String> stringStream = pattern.splitAsStream("a,b,c,d");stringStream.forEach(System.out::println);
?
Integer[] arr = {6, 3, 7, 3, 6,11,9, 10}; List<Integer> list = Arrays.asList(arr); List<Integer> newlist = new ArrayList<>(list); List<Integer> sList = newlist.stream() .filter(ele -> ele>5) // {6,7,6,11,9,10} .distinct() // {6,7,11,9,10} .sorted() // {6,7,9,10,11}
?
# 輸出元素對應(yīng)的平方數(shù) Integer[] arr = {1,2,3,4,5}; List<Integer> list = Arrays.asList(arr); List<Integer> newlist = new ArrayList<>(list); Stream<Integer> stream= newlist.stream() .map(i ->i*i); stream.forEach(System.out::println); // {1,3,9,16,25}
?
來源:https://www.icode9.com/content-1-657251.html