-
通过集合接口来生成Stream
- collect.stream() // 为集合创建串行流
- collect.parallelStream // 为集合创建并行流,相当于多线程操作,注意:使用线程安全的集合
-
Stream操作
- Stream的操作分为两种,中间操作(intermediate operation),最终操作(terminal operation)
- 中间操作返回一个中间流,以供后续操作使用
- 最终操作产生结果
- Stream的操作分为两种,中间操作(intermediate operation),最终操作(terminal operation)
-
中间操作(intermediate operation)
- filter()
- 对流进行过滤,只留下满足条件的元素,通常使用lambda表达式
- map()
- 对流中的元素进行映射,将一个元素转换为另一个元素,可以理解为与forEach()类似,但是forEach()为终端操作
- filter()
-
终端操作(terminal operation)
- collect()
-
collect()
-
collect()是一个终端操作,将流转换为各种结果
-
collect()提供两个重载方法
- <R, A> R collect(Collector<? super T, A, R> collector)
- R collect(Supplier supplier, BiConsumer<R, ? super T> accumulator, BiConsumer<R, R> combiner)
-
第一个重载方法接受Collector类作为参数,Collector类可以自定义,也可以使用Collectors工具类
-
-
Collectors工具类
-
转换为集合
- Collectors.toList()
- Collectors.toSet()
- Collectors.toMap()
- Collectors.toCollection()
-
数据统计
- 求平均值
- Collectors.averagingInt()
- Collectors.averagingLong()
- Collectors.averagingDouble()
- Collectors.counting() // 统计Stream元素个数
- Collectors.maxBy() // 指定条件下,Stream最大元素
- Collectors.minBy() // 指定条件下,Stream最小元素
- 求和
- Collectors.summingInt()
- Collectors.summingLong()
- Collectors.summingDouble()
- 求多个常规聚合值,包括count,min,max,sum,average
- Collectors.summarizingInt()
- Collectors.summarizingLong()
- Collectors.summarizingDouble()
- Collectors.reducing() // reduce操作
- 求平均值
-
数据分组
- Collectors.partitioningBy() // Map<Boolean, T>, 将Stream按照规则分为true和false两部分
- Collectors.groupingBy() // Map<T, R>, 与partitioningBy()的不同的在于Map的key的类型可以为T, 所以可以将数据分为多个组
-
字符串
- Collectors.joining() // 将数据转换为字符串,传递3个参数,分隔符,前缀,后缀
-
组合Collector
-