我的2023年java学习笔记,记录了我2023年的自学记录
Java中的Stream API是Java 8引入的一个重要特性,它提供了一种新的数据处理方式,使得在集合上进行操作更加简洁和高效。Stream API允许我们以声明性方式处理数据,类似于SQL查询,但适用于内存中的数据。 **Stream基本概念** Stream API提供了一种抽象的数据结构,用于处理数据集合。它可以是从集合、数组或其他数据源(如I/O通道)获取的数据流。Stream API的核心是它的操作,这些操作分为两种类型:中间操作和终端操作。 1. **中间操作** - 中间操作如filter(), map(), distinct()等,它们不会立即执行任何计算,而是定义了一个操作序列。你可以连续调用多个中间操作,它们会被链接在一起形成一个操作链。中间操作总是返回一个新的Stream,原有Stream保持不变。 2. **终端操作** - 终端操作如forEach(), count(), reduce()等,它们会触发实际的数据处理,并且每个流只能执行一次终端操作。一旦执行了终端操作,流就被消费掉了,不能再被使用。 **Stream流特性** 1. **不存储数据** - Stream不是存储数据的容器,它仅仅定义了数据处理的逻辑。 2. **不可变性** - Stream操作不会改变原始数据源,而是创建一个新的流或者产生一个新的结果。 3. **延迟执行** - Stream API具有延迟执行特性,这意味着直到调用了终端操作,中间操作才开始执行。这种设计提高了性能,因为中间操作可以被优化以减少不必要的计算。 **Stream的创建** Stream可以通过多种方式创建: - **从集合** - 可以使用Collection的stream()或parallelStream()方法将集合转换为Stream。 - **从数组** - 使用Arrays的stream()方法将数组转换为Stream。 - **使用Stream的静态方法** - Stream.of(), Stream.iterate(), Stream.generate()可以创建不同类型的Stream。 **Stream与parallelStream的区别** - **stream** - 是顺序流,操作按顺序在主线程中执行。 - **parallelStream** - 是并行流,它使用多线程并行处理数据,提高了计算速度。当处理任务没有顺序要求时,可以使用parallelStream来提升性能。 **Optional类** Optional是一个容器对象,可以用来表示可能不存在的值。它有助于避免空指针异常,通过Optional对象的isPresent()方法检查值是否存在,使用get()方法安全地获取值。在使用Stream API时,Optional经常与map()和flatMap()操作一起使用,以更安全地处理可能为空的值。 在实际应用中,我们可以使用Stream API进行各种操作,例如过滤、映射、分组、聚合等。以下是一个简单的例子,假设我们有一个Person对象的列表,我们可能想要找到薪资最高的Person: ```java Optional<Person> maxSalaryPerson = peopleList.stream() .max(Comparator.comparing(Person::getSalary)); maxSalaryPerson.ifPresent(person -> System.out.println("最高薪资的员工:" + person.getName())); ``` 这个例子中,`max()`是一个终端操作,它接收一个比较器并返回薪资最高的Person。`ifPresent()`方法确保在Person存在时才执行回调。 Stream API是Java 8的重要特性,极大地提升了处理集合数据的效率和代码的可读性。通过熟练掌握Stream API,开发者能够写出更加优雅和高效的代码。
剩余13页未读,继续阅读
- 粉丝: 48
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助