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

Java Stream API:如何使用Stream进行数据处理和过滤

发布时间:2023-05-27 12:04:10

Java Stream API 是 Java 8 中提供的一个API,用于对集合或数组等数据进行处理和过滤。Stream 提供了一种更加简洁和高效的方式来进行数据操作,并且可以以更加流畅和易读的方式来表达数据操作的逻辑。本文将介绍如何使用 Java Stream API 进行数据处理和过滤。

1. 创建 Stream

Stream API 只能用于集合或数组等数据类型,并且它是惰性求值的,也就是说只有在需要输出结果时才会进行操作,而不是立即对数据进行计算。

1.1. 从集合创建 Stream

先看一个从集合创建 Stream 的例子:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream = list.stream();
stream.forEach(System.out::println);

上面的代码先创建了一个整型的集合,然后通过 list.stream() 方法创建了一个 Stream 对象,最后通过 stream.forEach(System.out::println) 的方式对 Stream 进行输出,输出的结果是 1 2 3 4 5

1.2. 从数组创建 Stream

除了从集合创建 Stream,也可以从数组中创建 Stream,下面是一个例子:

int[] arr = {1, 2, 3, 4, 5};
IntStream stream = Arrays.stream(arr);
stream.forEach(System.out::println);

上面的代码先创建了一个整型数组,然后通过 Arrays.stream(arr) 创建了一个 IntStream 对象,最后通过 stream.forEach(System.out::println) 的方式对 Stream 进行输出,输出的结果也是 1 2 3 4 5

2. 过滤与筛选

Stream 提供了一种便捷的方式来进行数据过滤和筛选,下面我们看一个例子,假设我们有一个整型的集合,需要过滤出其中所有的偶数,并将它们打印出来。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
list.stream()
    .filter(num -> num % 2 == 0)
    .forEach(System.out::println);

上面的代码中,先通过 list.stream() 方法从集合中创建了一个 Stream 对象,然后使用 filter 方法对其中的元素进行过滤,过滤的规则是只保留对2取余为0的元素,最后通过 forEach 方法将过滤后的元素输出。

除了 filter 方法,Stream API 还提供了一些其他的方法来进行筛选和过滤,例如 distinct 用于去重、limit 用于限制元素的数量、skip 用于跳过前几个元素等。

List<String> list = Arrays.asList("java", "Java", "python", "PHP", "Java");
list.stream()
    .distinct()
    .limit(2)
    .skip(1)
    .forEach(System.out::println);

上面的代码中,先创建了一个包含多个字符串的集合,然后通过 list.stream() 方法创建了一个 Stream 对象,使用 distinct 方法进行去重,limit 方法限制元素数量为 2,skip 方法跳过 个元素,最后通过 forEach 方法将剩下的元素输出,输出结果为 Java python

3. 映射

Stream 还提供了一种映射的功能,可以将一个类型的元素映射成另一个类型的元素。例如,我们有一个包含多个字符串的集合,需要将其中的字符串转换成大写字母,并输出。

List<String> list = Arrays.asList("java", "Python", "ruby", "PHP");
list.stream()
    .map(String::toUpperCase)
    .forEach(System.out::println);

上面的代码中,先创建了一个包含多个字符串的集合,然后通过 list.stream() 方法创建了一个 Stream 对象,使用 map 方法将每个元素都转换成大写字母,最后通过 forEach 方法输出映射后的结果。

除了 map 方法,Stream API 还提供了一些其他的方法来进行操作,例如 flatMap 方法可以将一个 Stream 中的每个元素都映射成一个 Stream,然后将这些 Stream 合并成一个 Stream,peek 方法可以用于调试,并在每个元素被获取的时候输出一些信息等。

4. 聚合

Stream 还提供了一种聚合的功能,可以将多个元素聚合成一个,例如求和、求平均值等操作。下面是一个例子,假设有一个包含多个整型数字的集合,需要求其中所有数字的平均值。

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
double average = list.stream()
    .mapToInt(Integer::intValue)
    .average()
    .getAsDouble();
System.out.println("平均值为:" + average);

上面的代码中,先创建了一个包含多个整型数字的集合,然后通过 list.stream() 方法创建了一个 Stream 对象,使用 mapToInt 方法将每个元素都转换成整型,然后使用 average 方法求所有元素的平均值,最后使用 getAsDouble 方法将结果转换成 double 类型,并打印输出。

除了 average 方法,Stream API 还提供了一些其他的聚合方法,例如 count 方法可以统计元素的数量、maxmin 方法可以求最大和最小值等。

总结:

Java Stream API 提供了一种简单而高效的方式来进行数据处理和过滤。使用 Stream API 可以使我们的代码更加简洁和易读,并且可以更快地进行数据操作。在实际使用中,我们可以根据具体需求选择和组合 Stream API 的各种方法,以达到 的效果。