Java Stream 流的使用
在实际生产中,几乎很少使用for循环的结构进行操作,Java 8 提供的Stream可以大大提高程序员的生产力,由于自己之前对于Stream 流使用的并不是很熟练,所以在这里进行简单的总结归纳。
最后熟练的使用Stream流,不仅仅是对基础的熟悉,还是需要对于业务的一些理解需要比较深刻。
一、Stream 流的介绍
Stream流是类似于SQL语句,可以通过一种比较直观的方式对java的集合进行运算。
Stream 流,就是将要处理的元素看作是一种流,这个流在管道中运输,我们可以在管道中对管道中的节点进行处理,比如 筛选、排序、聚合 等等。
可以通过以下图,了解流的使用:
+--------------------+ +------+ +------+ +---+ +-------+
| stream of elements +-----> |filter+-> |sorted+-> |map+-> |collect|
+--------------------+ +------+ +------+ +---+ +-------+
Stream流有以下特点:
- 元素是特定类型的对象,形成一个队列。Java的Stream流不会存储元素,而是按需计算。
- Stream数据流的来源,可以是集合、数组,I/O,产生器等等。
- 聚合操作包括filter, map, reduce, find, match, sorted等等。
生成流
- stream() 为集合创建串行流;目前基本都是串行流
- parallelStream() 为集合创建并行流;
二、使用方式介绍
forEach
forEach可以迭代流中的每个元素。
Random random = new Random();
random.ints().limit(10).forEach(System.out::println);
map
map用于映射每个元素对应的结果。
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
// 获取对应的平方数
List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
filter
filter可以设置过滤条件。
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl"