1.stream流概述
(1)Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。
(2)Stream将要处理的元素集合看作一种流,在流的过程中,借助 Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。
(3)Stream可以由数组或集合创建,对流的操作分为两种:
中间操作,一个流后面可以跟随零个或多个中间操作,其目的主要是打开流,做出某种程度的数据过滤/映射,每次返回一个新的流,可以有多个,交给下一个操作使用。
终端操作,每个流只能进行一次终端操作,终端操作结束后流无法再次使用。终端操作会产生一个新的集合或值。
(4)另外,Stream有几个特性:
stream不存储数据,而是按照特定的规则对数据进行计算,一般会输出结果。
stream不会改变数据源,通常情况下会产生一个新的集合或一个值。
stream具有延迟执行特性,只有调用终端操作时,中间操作才会执行。
2.生成流的方式
在 Java 8 中, 集合接口有两个方法来生成流:
stream() —— 为集合创建串行流。
parallelStream() —— 为集合创建并行流。
List<String> strings = Arrays.asList("a", "", "b", "c", "d","", "e");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
3.获取流的方式
- 所有的 Collection 集合都可以通过 stream 默认方法获取流(顺序流);
- 所有的 Collection 集合都可以通过parallelStream获取流(并行流);
- Stream 接口的静态方法 of 可以获取数组对应的流;
- Arrays的静态方法stream也可以获取流。
(1)根据Collection获取流
//根据Collection获取流
//List--ArrayList
List<String> list = new ArrayList<>();
Stream<String> stream1 = list.stream();
//通过parallelStream
Stream<String> stream2 = list.parallelStream();
//Set--HashSet
HashSet<String