Java8-Stream

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

中間操作

發佈了65 篇原創文章 · 獲贊 75 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章