Java中兩種獲取Stream流的方式


獲取流

java.util.stream.Stream 是Java 8新加入的最常用的流接口。(這並不是一個函數式接口。)

獲取一個流非常簡單,有以下幾種常用的方式:

  • 所有的 Collection 集合都可以通過 stream 默認方法獲取流;
  • Stream 接口的靜態方法 of 可以獲取數組對應的流。

根據Collection獲取流

首先, java.util.Collection 接口中加入了default方法 stream 用來獲取流,所以其所有實現類均可獲取流。

import java.util.*;
import java.util.stream.Stream;

public class Demo03Stream {
    public static void main(String[] args) {
        
        List<String> list = new ArrayList<>();
        // ...
        Stream<String> stream1 = list.stream();
        
        Set<String> set = new HashSet<>();
        // ...
        Stream<String> stream2 = set.stream();
        
        Vector<String> vector = new Vector<>();
        // ...
        Stream<String> stream3 = vector.stream();
    }
}

Collection接口中加入的默認方法 —— stream方法,其源碼如下:

default Stream<E> stream() {
    return StreamSupport.stream(spliterator(), false);
}

根據Map獲取流

java.util.Map 接口不是 Collection 的子接口,且其K-V數據結構不符合流元素的單一特征,所以獲取對應的流需要分key、value或entry等情況:

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.stream.Stream;

public class Demo04Stream {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        // ...
        Set<String> key = map.keySet();
        Set<String> value = (Set<String>) map.values();
        Set<Map.Entry<String, String>> entries = map.entrySet();
        
        Stream<String> keyStream = key.stream();
        Stream<String> valueStream = value.stream();
        Stream<Map.Entry<String, String>> entryStream = entries.stream();
    }
}

Map接口比較特殊,它保存的數據是 Key - Value的,所以要分為Key、Value以及Key-Value情況,Key-Value情況即entry情況。將每種分別保存在Set集合中,而Set接口繼承於Collection接口,所以這里也就間接的使用了Collection接口的默認方法stream,來獲取流。

根據數組獲取流

如果使用的不是集合或映射而是數組,由於數組對象不可能添加默認方法,所以 Stream 接口中提供了靜態方法 of ,使用很簡單:

import java.util.stream.Stream;

public class Demo05GetStream {
    public static void main(String[] args) {
        String[] array = { "Java", "C", "Python", "Hadoop", "Spark" };
        Stream<String> stream = Stream.of(array);
    }
}
備注: of 方法的參數其實是一個可變參數,所以支持數組。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM