Java集合类函数式编程:Stream API的使用
在Java 8中,引入了Stream API,它可以在集合(List、Set、Map等)上进行函数式编程,提供了一种新的、更便捷的集合操作方式。Stream API将集合的元素看作是一系列数据流,通过一系列操作,可以对数据流进行筛选、转换、聚合等操作,大大减少了代码的复杂度。
Stream API的使用:
1. 创建流
Stream API提供了三种方式创建流:
1)通过集合类的stream()和parallelStream()方法创建。
List<String> list = Arrays.asList("hello", "world");
Stream<String> stream = list.stream(); // 串行流
Stream<String> parallelStream = list.parallelStream(); // 并行流
2)通过Stream类提供的of()方法创建。
Stream<String> stream = Stream.of("hello", "world");
3)通过Stream类提供的generate()和iterate()方法创建。
Stream<Double> stream1 = Stream.generate(Math::random);
stream1.limit(5).forEach(System.out::println); // 打印5个随机数
Stream<Integer> stream2 = Stream.iterate(0, n -> n + 2);
stream2.limit(5).forEach(System.out::println); // 打印0,2,4,6,8
2. 中间操作
Stream API提供了很多中间操作,可以对数据流进行筛选、转换、聚合等操作。例如:filter()、map()、distinct()、sorted()、limit()、skip()等等。
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();
stream.filter(i -> i > 3) // 过滤大于3的数
.map(i -> i * 2) // 每个数乘以2
.distinct() // 去重
.sorted() // 排序
.limit(2) // 取前两个
.forEach(System.out::println); // 打印结果为8,10
3. 终止操作
Stream API提供了很多终止操作,可以对数据流进行聚合、收集、遍历等操作。例如:count()、reduce()、collect()、forEach()等等。
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();
long count = stream.count(); // 计算元素个数
int sum = list.stream().reduce(0, Integer::sum); // 求和
List<Integer> evenList = list.stream().filter(i -> i % 2 == 0).collect(Collectors.toList()); // 收集偶数元素
list.forEach(System.out::println); // 遍历并打印每个元素
Stream API的优点:
1. 简洁易懂:使用Stream API可以以一种流畅的方式进行集合操作,代码更加简洁易懂,提高了代码可读性和可维护性。
2. 节省时间:使用Stream API可以显著地减少代码量,同时也可以节省开发时间。
3. 提高效率:Stream API本身就是一个并行处理的框架,可以充分利用多核CPU的性能,提高程序的执行效率。
4. 更加灵活:Stream API提供了大量中间操作和终止操作,可以实现各种复杂的数据处理需求,更加灵活。
5. 更加安全:Stream API可以避免空指针异常等多种异常情况,提高了程序的安全性。
综上所述,Stream API是一个非常强大、灵活、安全、高效的集合操作框架,值得开发者深入学习和使用。
