什么是Stream
1.Stream关注的是对数据的运算,与CPU打交道。集合关注的是数据的存储,与内存打交道。
2. Stream自己不会存储元素,不会改变元素。相反,他们会返回一个持有结果的新Stream。
Stream的操作是延迟执行的,这意味着他们会等到需要结果的时候才能执行。
3.Stream执行流程
- Stream的实例化
- 一系列的中间操作(过滤,映射....)
- 终止操作
4.说明:
- 一个中间操作链,对数据源的数据进行处理
- 一旦执行终止操作,就执行中间操作链,并产生结果,之后就不会再被使用
如何创建Stream
//创建Stream方法一:通过集合
@Test
public void test1() {
ArrayList<Integer> integers = new ArrayList<>();
//default Stream<E> stream() 返回一个顺序流
Stream<Integer> stream = integers.stream();
//default Stream<E> parallelStream() 返回一个并行流
Stream<Integer> integerStream = integers.parallelStream();
}
//创建Stream方法二:通过数组
@Test
public void test2() {
int[] nums = new int[]{1, 2, 3, 4, 5, 6};
//调用Arrays类的 public static IntStream stream(int[] array) 返回一个流
IntStream stream = Arrays.stream(nums);
}
//创建Stream方法三:通过Stream的of(),通过显式的值创建一个流,他可以接受任意的参数
@Test
public void test3() {
Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5);
}
//创建Stream方法四:创建无限流,如果没有limit将会无限生成流
@Test
public void test4() {
//遍历前十个数 public static<T> Stream<T> iterate(final T seed, final UnaryOperator<T> f)
Stream.iterate(0, t -> t + 2).limit(10).forEach(System.out::println);
//生成 public static<T> Stream<T> generate(Supplier<T> s)
Stream.generate(Math::random).limit(10).forEach(System.out::println);
}