Java8-Stream
在Java8中新增了一個Stream流來對集合和數組進行處理,Stream流通過聲明式的方式既Lambda來操作集合和數組,Stram把數據源當作流,流在管道中傳輸,在管道中可以進行一系列的操作如過濾,排序,收集等,稱之爲中間操作。最後處理中間操作得到的結果,稱之爲最終操作
Stream
- Stream不會存儲元素
- 數據源不會被改變:產生新流並不會改變原來的數據源
- 內部迭代: 之前對集合遍歷都是通過Iterator或者ForEach的方式, 顯式的在集合外部進行迭代, 這叫做外部迭代。 Stream提供了內部迭代的方式
生成流
- 通過Collection接口提供的stream()方法,也就是說實現了Collection接口都可以生成流
List<String> list = new ArrayList<>();
Stream<String> stringStream = list.stream();
Set<Integer> set = new HashSet<>();
Stream<Integer> integerStream = set.stream();
- Arrays中的stream()方法,生成數組流
String[] strings = new String[7];
Stream<String> stringStream = Arrays.stream(strings);
- Stream接口的靜態方法:of(),生成的是有限流
//返回含有多個T元素的流
public static<T> Stream<T> of(T... values);
//返回T元素的流
public static<T> Stream<T> of(T t);
- Stream接口的靜態方法:iterate,生成的是無限流,
//第一個參數是種子,第二個參數是一元操作,既通過第二個參數f,對種子進行操作而產生無限流
public static<T> Stream<T> iterate(final T seed, final UnaryOperator<T> f)
//從0開始,每次加2,以此類推
Stream<Integer> iterate = Stream.iterate(0, (x)->x+2);//產生的流是0,2,4,6,8,10....
- Stream接口的靜態方法:generate,生成的也是無限流
//其用來返回任何泛型的值
public static<T> Stream<T> generate(Supplier<T> s)
//生成UUID的無限流
Stream.generate(()->UUID.randomUUID().toString());