📜  使用 Stream API 和示例在Java 8+ 中进行函数式编程(1)

📅  最后修改于: 2023-12-03 15:22:17.004000             🧑  作者: Mango

使用 Stream API 和示例在Java 8+ 中进行函数式编程

函数式编程是一种编程范式,强调函数的运算和行为,而不是面向对象编程中强调的对象。Java 8 引入了 Stream API,使得 Java 也可以支持函数式编程。下文将介绍如何在 Java 8+ 中使用 Stream API 进行函数式编程。

什么是 Stream?

Stream 是 Java 8 中的新概念,它是一个对象序列,并且它不是一个数据结构。Stream 并不保存数据,而是提供了一种从集合中进行函数式、流式操作的方式。

如何使用 Stream API?

使用 Stream API 有以下步骤:

  1. 获取一个数据源(例如:集合、数组)。
  2. 调用 stream() 方法得到 Stream。
  3. 对于 Stream 进行操作(例如:过滤、映射、聚合等)。
  4. 执行操作并产生结果。

下面给出一个使用 Stream API 进行函数式编程的示例:

import java.util.Arrays;
import java.util.List;

public class StreamExample {
    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        // 过滤出所有奇数
        numbers.stream()
               .filter(n -> n % 2 != 0)
               .forEach(System.out::println);

        // 对所有元素求和
        int sum = numbers.stream().mapToInt(Integer::intValue).sum();
        System.out.println(sum);

        // 找出最大值和最小值
        int max = numbers.stream().mapToInt(Integer::intValue).max().orElse(-1);
        int min = numbers.stream().mapToInt(Integer::intValue).min().orElse(-1);
        System.out.println(max + " " + min);
    }
}

通过运行上述代码,可以看到输出结果为:

1
3
5
15
5 1
常用的 Stream 方法

以下是一些常用的 Stream 方法:

filter

filter 方法用于过滤元素,它接受一个 Predicate 参数,用于指定过滤条件。例如:

Stream<Integer> stream = numbers.stream().filter(n -> n % 2 != 0);
map

map 方法用于映射元素,它接受一个 Function 参数,用于对元素进行转换。例如:

Stream<String> stream = numbers.stream().map(n -> "number: " + n);
forEach

forEach 方法用于遍历元素,它接受一个 Consumer 参数,用于对每个元素进行操作。例如:

numbers.stream().forEach(System.out::println);
limit

limit 方法用于限制元素数量,它接受一个 long 参数,用于指定限制数量。例如:

Stream<Integer> stream = numbers.stream().limit(3);
skip

skip 方法用于跳过元素,它接受一个 long 参数,用于指定跳过数量。例如:

Stream<Integer> stream = numbers.stream().skip(2);
distinct

distinct 方法用于去重,它返回一个去重后的 Stream。例如:

Stream<Integer> stream = numbers.stream().distinct();
sorted

sorted 方法用于排序,它返回一个排序后的 Stream。例如:

Stream<Integer> stream = numbers.stream().sorted();
总结

Stream API 可以让我们更方便地进行函数式编程,它提供了丰富的操作方法,可以让我们轻松进行数据的过滤、转换、聚合等操作。希望本文能够帮助你更好地理解和使用 Stream API。