JavaSE-21 【Stream流】

1 Stream的介绍

1.1 概念

stream流操作是Java 8提供一个重要新特性,它允许开发人员以声明性方式处理集合,
	其核心类库主要改进了对集合类的 API和新增Stream操作。
	
Stream类中每一个方法都对应集合上的一种操作。将真正的函数式编程引入到Java中,
	能让代码更加简洁,极大地简化了集合的处理操作,提高了开发的效率和生产力。

stream不是一种数据结构,它只是某种数据源的一个视图,数据源可以是一个数组,Java容器等。
	在Stream中的操作每一次都会产生新的流,内部不会像普通集合操作一样立刻获取值,
		而是 惰性取值 ,只有等到用户真正需要结果的时候才会执行。 
	并且对于现在调用的方法,本身都是一种高层次构件,与线程模型无关。
		因此在并行使用中无需再去操心线程和锁。Stream内部都已经做好了 。

1.2 原理

可以把Stream流当成工厂中的流水线,
	每个stream流的操作过程遵循着创建 -->操作 -->获取结果的过程,
可以把他理解成sql的视图,
	集合就相当于数据表中的数据,获取stream流的过程就是确定数据表的属性和元数据的过程,
	对stream流进行操作的过程就是通过sql对这些数据进行查找、过滤、组合、计算、
	操作、分组等过程,获取结果就是sql执行完毕之后获取的结果视图一样

1.3 特点

  • Stream可以由数组或集合创建,对流的操作分为两种:

    • 中间操作,每次返回一个新的流,可以有多个
    • 终端操作,每个流只能进行一次终端操作,终端操作结束后流无法再次使用。终端操作会产生一个新的集合或值
  • 特点:

    • stream不存储数据,而是按照特定的规则对数据进行计算,一般会输出结果
    • stream不会改变数据源,通常情况下会产生一个新的集合或一个值。
    • stream具有延迟执行特性,只有调用终端操作时,中间操作才会执行。

2 Stream的创建

2.1 集合创建

通过java.util.Collection.stream()方法用集合创建流

    @Test
    public void m1(){
        List<String> list = new ArrayList<>();
        list.add("AAA");
        //创建stream顺序流对象
        Stream<String> stream1 = list.stream();
        //创建stream顺序流对象
        Stream<String> stream2 = list.parallelStream();
        System.out.println(stream1);
        System.out.println(stream2);
    }

2.2 数组创建

使用java.util.Arrays.stream(T[] array)方法用数组创建流

    @Test
    public void m2(){
        String[] arrStr = {"AAA","BBB","CCC"};
        Stream<String> stream = Arrays.stream(arrStr);
    }

2.3 静态方法创建

使用Stream的静态方法:of()、iterate()、generate()


3 Stream的API

你可能感兴趣的:(JavaSE,java)