欢迎访问宙启技术站
智能推送

Java集合类函数式编程:Stream API的使用

发布时间:2023-06-05 00:57:49

在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是一个非常强大、灵活、安全、高效的集合操作框架,值得开发者深入学习和使用。