创建Stream流对象
在上一小节中,介绍了聚合操作的主要使用步骤,其中首要解决的问题就是创建Stream流对象。聚合操作针对的就是可迭代数据进行的操作,如集合、数组等,所以创建Stream流对象其实就是将集合、数组等通过一些方法转换为Stream流对象。
在Java中,集合对象有对应的集合类,可以通过集合类提供的静态方法创建Stream流对象,而数组数据却没有对应的数组类,所以必须通过其他方法创建Stream流对象。针对不同的源数据,Java提供了多种创建Stream流对象的方式,分别如下:
● 所有的Collections集合都可以使用stream()静态方法获取Stream流对象;
● Stream接口的of()静态方法可以获取基本类型包装类数组、引用类型数组和单个元素的Stream流对象;
● Arrays数组工具类的stream()静态方法也可以获取数组元素的Stream流对象。
接下来,通过一个案例来学习聚合操作中如何创建Stream流对象,如文件1所示。
文件1 Example32.java
1 import java.util.*;
2 import java.util.stream.Stream;
3 public class Example32 {
4 public static void main(String[] args) {
5 // 创建一个数组
6 Integer[] array = { 9, 8, 3, 5, 2 };
7 // 将数组转换为List集合
8 List<Integer> list = Arrays.asList(array);
9 // 1、使用集合对象的stream()静态方法创建Stream流对象
10 Stream<Integer> stream = list.stream();
11 stream.forEach(i -> System.out.print(i+" "));
12 System.out.println();
13 // 2、使用Stream接口的of()静态方法创建Stream流对象
14 Stream<Integer> stream2 = Stream.of(array);
15 stream2.forEach(i -> System.out.print(i+" "));
16 System.out.println();
17 // 3、使用Arrays数组工具类的stream()静态方法创建Stream流对象
18 Stream<Integer> stream3 = Arrays.stream(array);
19 stream3.forEach(i -> System.out.print(i+" "));
20 }
21 }
运行结果如图1所示。
图1 运行结果
文件1中,先创建了一个数组和一个集合,然后通过三种方式实现了Stream流对象的创建,并通过Stream流对象的forEach()方法结合Lambda表达式完成了集合和数组中元素的遍历。
小提示:
在JDK 8中,只针对单列集合Collections接口对象提供了stream()静态方法获取Stream流对象,并未对Map集合提供相关方法获取Stream流对象,所以想要用Map集合创建Stream流对象必须先通过Map集合的keySet()、values()、entrySet()等方法将Map集合转换为单列Set集合,然后再使用单列集合的stream()静态方法获取对应键、值集合的Stream流对象。