自学内容网 自学内容网

Java 8 Stream API 入门教程:轻松使用 map、filter 和 collect 进行数据处理

流式处理是 Java 8 引入的一个强大功能,特别适用于集合的处理,它提供了更加简洁和声明式的方式来操作数据。流式处理(Stream API)使得开发者能够通过一系列的函数式操作来处理集合(如 List、Set 等)。其中,常用的操作包括 mapfiltercollect。下面我们将介绍这三者的基本用法,并结合示例代码加以说明。

1. map 操作

map 是流中的一个中间操作,用于将流中的元素映射成另一个形式。它接收一个函数作为参数,这个函数将作用于流中的每个元素,返回一个新的元素。map 常用于转换元素的类型或对元素进行某种处理。

示例:将整数列表中的每个元素乘以 2
import java.util.*;
import java.util.stream.*;

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

        // 使用 map 操作将每个元素乘以 2
        List<Integer> doubledNumbers = numbers.stream()
                                               .map(n -> n * 2)
                                               .collect(Collectors.toList());

        System.out.println(doubledNumbers); // 输出: [2, 4, 6, 8, 10]
    }
}

2. filter 操作

import java.util.*;
import java.util.stream.*;

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

        // 使用 filter 操作筛选出偶数
        List<Integer> evenNumbers = numbers.stream()
                                           .filter(n -> n % 2 == 0)
                                           .collect(Collectors.toList());

        System.out.println(evenNumbers); // 输出: [2, 4, 6, 8, 10]
    }
}

filter 是流中的另一个中间操作,用于筛选符合条件的元素。它接收一个谓词(Predicate)作为参数,流中只有满足条件的元素会被保留下来。

示例:筛选出列表中的偶数

3. collect 操作

collect 是流的一个终端操作,用于将流的元素转化为其他形式,通常是集合。collect 操作非常常见,它可以将流的结果聚合成一个 List、Set、Map 等集合,或者进行其他的汇总操作(如求和、平均等)。

示例:将筛选后的偶数元素收集到一个 Set 中
import java.util.*;
import java.util.stream.*;

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

        // 使用 filter 筛选偶数,并收集到 Set 中
        Set<Integer> evenNumbersSet = numbers.stream()
                                             .filter(n -> n % 2 == 0)
                                             .collect(Collectors.toSet());

        System.out.println(evenNumbersSet); // 输出: [2, 4, 6, 8, 10]
    }
}

综合示例:使用 mapfiltercollect 进行链式操作

流式处理的一个强大之处就是支持链式调用。你可以在一个流中同时使用 mapfiltercollect 等操作,将多个操作组合在一起,进行复杂的数据处理。

示例:将列表中的偶数元素加倍并收集到一个新的列表中
import java.util.*;
import java.util.stream.*;

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

        // 链式操作:筛选偶数并将其加倍,最后收集到列表中
        List<Integer> result = numbers.stream()
                                      .filter(n -> n % 2 == 0)     // 筛选偶数
                                      .map(n -> n * 2)             // 将偶数加倍
                                      .collect(Collectors.toList()); // 收集到列表

        System.out.println(result); // 输出: [4, 8, 12, 16, 20]
    }
}

总结

  • map 用于转换流中的每个元素,返回处理后的新元素。
  • filter 用于筛选流中符合条件的元素,返回符合条件的元素。
  • collect 用于将流处理的结果收集到集合中。

流式处理通过这些基本操作,可以以更简洁和声明的方式对集合数据进行处理,避免了显式的循环和条件判断,使代码更加易于理解和维护。


原文地址:https://blog.csdn.net/qq_40697623/article/details/144182295

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!