Fork me on GitHub

StreamAPI概述和创建

了解Stream

Stream是Java8中处理集合的关键抽象概念,他可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤、和映射数据等操作。使用StreamAPI对集合数据进行操作,就类似与使用SQL执行的数据库查询。也可以使用StreamAPI来并行执行操作。简而言之,StreamAPI提供了一种高效且易于使用的处理数据的方式。

什么是Stream

是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。“集合讲的是数据,流讲的是计算”

注意

Stream自己不会存储元素

Stream不会改变源对象。相反,他们会返回一个持有结果的新Stream

Stream操作是延迟的。这意味着他们会等到需要结果的时候才执行

Stream操作的三个步骤

创建Stream

一个数据源(如,集合、数组),获取一个流

中间操作

一个中间操作链,对数据源数据进行处理

终止操作(终端操作)

一个终止操作,执行中间操作链,并产生结果

创建Stream

通过Collection系列集合提供Stream()或parallelStream()
@Test
public void test(){
    //1.通过Collection系列集合提供Stream()或parallelStream()
    List<String> list = new ArrayList<String>();
    Stream<String> stream1 = list.stream();
    //Stream<String> stream1 = list.parallelStream();

}
由数组创建流:通过Arrays中静态方法stream()获取数组流
重载形式,能够处理对应基本类型的数组

public static IntStream stream(int[] array)

public static LongStream stream(long[] array)

public static DoubleStream stream(double[] array)

@Test
public void test(){
    //2.通过Arrays中静态方法stream()获取数组流
    String[] str = new String[10];
    Stream<String> stream2 = Arrays.stream(str);
}
由值创建流:可以使用静态方法Stream.of(),通过显示值创建流
@Test
public void test(){
    //3.可以使用静态方法Stream.of(),通过显示值创建流
    Stream<String> stream3 = Stream.of("AA", "BB", "CC");
}
由函数创建流:创建无限流–可以使用静态方法Stream.iterate()和Stream.generate()
 @Test
public void test(){
    //4.可以使用静态方法Stream.iterate()和Stream.generate()
    //4.1迭代
    Stream.iterate(0,(x) -> x+2 ).limit(10).forEach(System.out::println);

    System.out.println("----------------------------------------------");

    //4.2生成
    Stream.generate(() -> Math.random()).limit(5).forEach(System.out::println);

}