了解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);
}

