当前位置: 首页 > article >正文

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 用于将流处理的结果收集到集合中。

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


http://www.kler.cn/a/419913.html

相关文章:

  • Kafka配置SASL/PLAINTEXT安全认证
  • Ambrus 游戏工作室将应对气候变暖与游戏变现完美结合
  • Rust循环引用与多线程并发
  • Bert+CRF的NER实战
  • 微信小程序 运行出错 弹出提示框(获取token失败,请重试 或者 请求失败)
  • 搭建环境-PHP简介及环境搭建教程
  • PyCharm中Python项目打包并运行到服务器的简明指南
  • SpringBoot3 + Vue3 由浅入深的交互 基础交互教学2
  • 数据库管理-第267期 23ai:Oracle Data Redaction演示(20241128)
  • CSS学习记录03
  • NLP 的发展历程
  • 洛谷 P1308 [NOIP2011 普及组] 统计单词数 C语言
  • 对于大规模的淘宝API接口数据,有什么高效的处理方法?
  • 2. langgraph中的Tool Calling (How to handle tool calling errors)
  • AI在SEO中的应用与关键词优化探讨
  • 011变长子网掩码
  • React 前端框架1
  • <<WTF-Solidity>>学习笔记(part 25-28)
  • 物联网——WatchDog(监听器)
  • 关于正点原子STM32F404探索者V3ZGT6 RS232串口的使用
  • navicat连接mysql 8.0以上版本2059错误
  • Gazebo插件相机传感器(可订阅/camera/image_raw话题)
  • OpenCV_Code_LOG
  • IT监控:Perseus采集平台的介绍
  • Java 并发基础之 Java NIO 详解
  • openssl哈希算法