Java List过滤 Stream API filter() 应用

devtools/2025/1/19 3:42:34/

Java 8 前用 for-each 循环或 Iterator 处理集合,引入 Stream API 后可更简洁、声明式地处理集合,在复杂数据处理时更便捷
在这里插入图片描述

1. Stream与Filter基础

Stream 是从支持数据源获取数据的序列,有强大 API 可执行中间和最终操作,能内部并行化提升大规模数据处理性能,基于函数式编程逻辑清晰,可利用并行计算提升大数据处理速度,惰性求值避免一次性加载整个集合

filter 是 Stream 的中间操作,接受谓词函数参数,返回新 Stream,包含满足条件元素,如以下代码展示如何用 filter 从 words 列表中筛选以“c”开头的单词。

java">List<String> words = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");
List<String> filteredWords = words.stream().filter(word -> word.startsWith("c")).collect(Collectors.toList());

2. 多条件筛选

Stream API 可链式调用多个 filter 等中间操作实现多条件筛选,此示例展示了根据年龄和性别条件过滤 30 岁以下女性对象。

java">List<Person> people = ... // 假设Person类有age和gender属性
List<Person> youngFemales = people.stream().filter(p -> p.getAge() < 30).filter(p -> "female".equals(p.getGender())).collect(Collectors.toList());

3. 实战示例

假设我们有个Employee类,有name(姓名)、age(年龄)、salary(薪水)属性,有个员工列表,要筛选出年龄大于 30 岁且薪水超 50000 的员工。先定义Employee

java">public class Employee {private String name;private int age;private double salary;public Employee(String name, int age, double salary) {this.name = name;this.age = age;this.salary = salary;}public String getName() {return name;}public int getAge() {return age;}public double getSalary() {return salary;}@Overridepublic String toString() {return "Employee{" +"name='" + name + '\'' +", age=" + age +", salary=" + salary +'}';}
}

然后创建员工列表,用 Stream API 过滤数据

java">import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;public class StreamFilterExample {public static void main(String[] args) {List<Employee> employees = Arrays.asList(new Employee("Alice", 32, 60000),new Employee("Bob", 28, 55000),new Employee("Charlie", 35, 70000),new Employee("David", 26, 45000),new Employee("Eve", 30, 55000));// 使用Stream API过滤数据List<Employee> filteredEmployees = employees.stream().filter(employee -> employee.getAge() > 30).filter(employee -> employee.getSalary() > 50000).collect(Collectors.toList());// 输出结果System.out.println("Filtered Employees: ");filteredEmployees.forEach(System.out::println);}
}

在代码中,先调用employees.stream()将列表转为 Stream,经两次链式调用.filter()按年龄和薪水条件筛选,再用.collect(Collectors.toList())将满足条件的员工对象收集到新列表,运行后输出年龄大于 30 岁且薪水超过 50000 的员工信息

4. 应用场景总结

  • 数据清洗:筛选符合条件的数据。
  • 报表统计:快速汇总特定条件统计数据。
  • 业务逻辑处理:简化复杂业务场景循环和判断。
  • 数据库查询结果处理:对接查询结果后过滤转换数据。

What is Java technology and why do I need it?
Java is a programming language and computing platform first released by Sun Microsystems in 1995. It has evolved from humble beginnings to power a large share of today’s digital world, by providing the reliable platform upon which many services and applications are built. New, innovative products and digital services designed for the future continue to rely on Java, as well.

While most modern Java applications combine the Java runtime and application together, there are still many applications and even some websites that will not function unless you have a desktop Java installed. Java.com, this website, is intended for consumers who may still require Java for their desktop applications – specifically applications targeting Java 8. Developers as well as users that would like to learn Java programming should visit the dev.java website instead and business users should visit oracle.com/java for more information.

Is Java free to download?
Yes, Java is free to download for personal use.
Java is also free for development: developers can find all the development kits and other useful tools at https://www.oracle.com/javadownload/.

Why should I upgrade to the latest Java patch each quarter when prompted?
The latest Java patches contain important enhancements to improve performance, stability and security of the Java applications that run on your machine. Installing these updates will ensure that your Java applications continue to run with the most up-to-date version.


http://www.ppmy.cn/devtools/151732.html

相关文章

RPC 简介

RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;是一种通过网络请求执行远程服务器上的代码的技术&#xff0c;使得开发者可以调用远程系统中的函数&#xff0c;就像调用本地函数一样。它隐藏了底层网络通信的细节&#xff0c;简化了分布式系统的开…

C++学习记录

本文章建立在已学C语言的基础上 第一阶段 生成随机数函数&#xff1a;rand()。rand()%100指的是生成0~99的随机数。这样生成的随机数每次都是一样顺序出现的&#xff0c;为了防止这个问题出现&#xff0c;我们可以使用随机数种子&#xff0c;如下代码 #include<iostream&…

使用 Golang 编译 Linux 可运行文件

Golang&#xff08;或 Go&#xff09;是一种开源编程语言&#xff0c;因其简单、高效、并发编程支持而备受欢迎。本文将详细介绍如何使用 Golang 编译生成可以在 Linux 上运行的可执行文件。 一、安装 Golang 1.1 下载 Golang 从 Golang 官方网站下载适合你操作系统的安装包…

【STM32-学习笔记-7-】USART串口通信

文章目录 USART串口通信Ⅰ、硬件电路Ⅱ、常见的电平标准Ⅲ、串口参数及时序Ⅳ、STM32的USART简介数据帧起始位侦测数据采样波特率发生器 Ⅴ、USART函数介绍Ⅵ、USART_InitTypeDef结构体参数1、USART_BaudRate2、USART_WordLength3、USART_StopBits4、USART_Parity5、USART_Mode…

多态(4)

大家好&#xff0c;今天我们来讲讲向下转型这个知识点&#xff0c;这个知识点并没有向上转型用得那么频繁&#xff0c;但是也需要了解一下。 2.4.2向下转型 当一个子类对象经过向上转型之后当成父类方法使用,再无法调用子类的属性和方法。但有时候可能需要调用子类的属性和方…

PyTorch 中的 Dropout 解析

文章目录 一、Dropout 的核心作用数值示例&#xff1a;置零与缩放**训练阶段****推理阶段** 二、Dropout 的最佳使用位置与具体实例解析1. 放在全连接层后2. 卷积层后的使用考量3. BatchNorm 层与 Dropout 的关系4. Transformer 中的 Dropout 应用 三、如何确定 Dropout 的位置…

MinerU:高效智能PDF文档解析工具完全指南

引言 MinerU是一款开源的智能文档解析工具&#xff0c;专注于将PDF等文档高效转换为Markdown和JSON等结构化格式。在当前大语言模型(LLM)蓬勃发展的时代&#xff0c;高质量的结构化数据对于训练和微调LLM至关重要。MinerU通过其强大的智能文档解析能力&#xff0c;不仅可以为L…

Visual Studio环境搭建Qgis二次开发环境

QGIS&#xff08;Quantum GIS&#xff09;是一款开源的地理信息系统软件&#xff0c;支持二次开发以满足特定的地理信息处理需求。二次开发通常涉及到使用QGIS提供的API和SDK来创建自定义插件或独立应用程序。以下是关于如何搭建QGIS二次开发环境的一些关键步骤和注意事项。 1…