步骤:
1. 先得到一条 Stream 流(流水线),并把数据放上去
2. 使用 中间方法 对流水线上的数据进行操作
3. 使用 终结方法 对流水线上的数据进行操作
单列集合:default Stream<E> stream () → Collection 中的默认方法
双列集合:无法直接使用 stream 流,需要通过 keySet () 或者 entrySet () 先转成单列集合,再获取 stream 流
数组:public static <T> Stream<T> stream ( T [ ] array ) → Arrays 工具类中的静态方法
一堆零散数据:public static<T> Stream<T> of ( T ... values ) → Stream 接口中的静态方法
Stream 接口中静态方法 of 的细节:方法的形参是一个可变参数,可以传递一堆零散的数据,也可以传递数组,但是数组必须是引用数据类型的,如果传递基本数据类型,该方法是不会整体自动装箱的,而是会把整个数组当作一个元素 放到 Stream 流当中。我们想要的是把数组里面的数据放到 Stream 流当中,而不是把数组整体放到流当中。
举例:
1. 单列集合:
// 单列集合获取 Stream 流
ArrayList<String> list = new ArrayList<>();
Collections.addAll(list, "a", "b", "c", "d", "e");
// 因为 ArrayList 是 Collection 接口的实现类,所以可以直接调用。
// 获取一条流水线,并把集合中的数据放到流水线上
Stream<String> stream1 = list.stream();
// 使用终结方法 打印一下流水线上的所有数据
stream1.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
// s 依次表示流水线上的每一个数据
System.out.println(s);
}
});
简写形式:也可以直接链式调用:list.stream().forEach(s -> System.out.println(s));
2. 双列集合:
// 双列集合获取 Stream 流
HashMap<String, Integer> hm = new HashMap<>();
hm.put("a", 1);
hm.put("b", 2);
hm.put("c", 3);
hm.put("d", 4);
// 第一种方法获取 Stream 流
hm.keySet().stream().forEach(s -> System.out.println(s)); // a b c d
// 第二种方法获取 Stream 流
hm.entrySet().stream().forEach(s -> System.out.println(s)); // a=1 b=2 c=3 d=4
3. 数组:
int[] arr = {1, 2, 3, 4, 5, 6};
// 获取 Stream 流
Arrays.stream(arr).forEach(s -> System.out.println(s));
4.一堆零散数据:
Stream.of(1, 2, 3).forEach(s -> System.out.println(s));