目录
实验十 集合流的聚合操作
实验目的
对集合流使用聚合操作来简化代码和提高性能。
在流上创建一个流管道,使用惰性中间方法和终止方法。
创建并行流以实现快速执行。
使用reduce方法将流中的元素减少为单一结果。
使用collect方法将流中元素放入可变集合。
将流中元素分组并对组中的元素使用聚合方法。
实验内容
编写CountLettersUsingStream类的main方法,使用Stream来简化实现:随机生成1000个小写字母并计算每个字母出现次数。
实验代码框架
import java.util.Random;
import java.util.TreeMap;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class CountLettersUsingStream {
private static int count=0;
public static void main(String[] args) {
}
}
实验设计的思路与考量
Lambda表达式
Java 8(JDK 1.8)中,加入了lamda表达式,标准格式为:
(参数类型 参数名称) ‐> { 代码语句 }
小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。
-> 是新引入的语法格式,代表指向动作。
大括号内的语法与传统方法体要求基本一致。
大多数流的方法的参数是函数接口的实例。所以,可以用lamda表达式或方法引用来创建参数。
流管道
流管道由一个源(例如,一个线性表,一个规则集或一个数组)、一个创建流的方法、零个或多个中间方法、一个最终终止方法组成。比如:set.stream().limit(50).distinct().count(),set是数据源,调用stream()方法为源中的数据创建了一个六,调用limit(50)返回由流中前50个元素组成的流,调用distinct()获得由这个流中不同的元素组成的流,而调用count()返回了最终流的个数。
流是惰性的,这意味着仅仅当终止操作开始时才会进行计算。
常用流方法
- Stream.of、limit、forEach
- sorted
- filter
- max和min
- anyMatch、allMatch、noneMatch
- map、distinct、count
- findFirst、findAny、toArray
- IntStream、LongStream、DoubleStream
- 并行流
- 使用reduce方法进行流的归约
- 使用collect方法进行流的归约
- 使用groupingBy收集器进行元素分组