獲取流
java.util.stream.Stream
獲取一個流非常簡單,有以下幾種常用的方式:
- 所有的 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 方法的參數其實是一個可變參數,所以支持數組。