一. 基本概念
1.1 什么是流
不是集合,不是數據結構,不保存數據,它類似於 Iterator,對數據進行並行或者串行遍歷,然后對數據進行一系列計算、過濾等操作,最終得到結果。
1.2 為什么加入集合的流式操作
-
更容易對集合進行一系列的操作:如過濾、轉換、統計等
-
可以並行的對集合進行操作,速度更快
-
配合lambda使用可讀性更強,代碼更加簡潔
二. 集合操作分類:中間操作 和 最終操作
2.1 中間操作( intermediate,可以連續多個 )
filter(): 對元素進行過濾
sorted():對元素排序
map():元素映射
distinct():去除重復的元素
List<Integer> list = Arrays.asList(new Integer[]{1,2,3,5,7,8,10,10}) ; // List<Integer> list2 = list.stream().filter((k)-> k%2==0).collect(Collectors.toList()); //集合數據按照條件進行過濾,不符合條件的直接扔掉 list.stream().filter((k)-> k%2==0).forEach(System.out::println ); //對數據進行排序,也可以使用 lambda自定義函數排序 list.stream().sorted().forEach(System.out::println ); //對所有數據進行統一的計算,得到一個新的集合 list.stream().map( k->k+10 ).forEach(System.out::println ); //對集合中數據 去重 list.stream().distinct( ).forEach(System.out::println );
2.2 最終操作( terminal ,只能有一個)
-
forEach():遍歷每個元素。
-
reduce():把Stream 元素數據整合然后統計。例如,字符串拼接,數值的 sum,min,max ,average 都是特殊的 reduce。
-
collect():返回一個新的集合。
-
min():找到最小值。
-
max():找到最大值。
三、函數操作實例
3.1 構建stream對象
// 1. Individual values Stream stream = Stream.of("a", "b", "c"); // 2. Arrays String [] strArray = new String[] {"a", "b", "c"}; stream = Stream.of(strArray); stream = Arrays.stream(strArray); // 3. Collections List<String> list = Arrays.asList(strArray); stream = list.stream();
3.2 基礎的操作實例
List<Integer> list = Arrays.asList(new Integer[]{1,2,3,5,7,8,10,10}) ; // List<Integer> list2 = list.stream().filter((k)-> k%2==0).collect(Collectors.toList()); //對集合數據進行 加減乘,得到最后的結果 Integer result = list.stream().reduce((a,b)->a+b ).get(); System.out.println( result ); //返回集合set HashSet<Integer> set1 = list.stream().collect( Collectors.toCollection( ( )->{return new HashSet<>(); }) ); System.out.println( set1 ); //獲取列表中的最大值 Integer maxVal = list.stream().max((x,y)->{ return x>y?1:-1; }).get(); System.out.println( maxVal );
四、參考