Java List过滤 Stream API filter() 应用

embedded/2025/1/19 17:03:43/

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/embedded/155273.html

相关文章

如何发布自己的第一个Chrome扩展程序

如何发布自己的Chrome扩展程序 只需要六步即可完成Chrome扩展程序的发布 &#xff08;1&#xff09;首先打开google chrome 应用商城注册开发者账号的页面 &#xff08;2&#xff09;现在进行一个绑卡支付5美元的一次性注册费用即可。【不知道如何绑卡的支付的&#xff0c;文…

单片机数码管动态显示

在学习 51 单片机的过程中&#xff0c;数码管动态显示是一个非常基础且重要的知识点。通过数码管&#xff0c;我们可以直观地展示数字、字符等信息&#xff0c;在很多电子设备中都有广泛应用&#xff0c;比如电子时钟、数字万用表等。本文将详细介绍 51 单片机数码管动态显示的…

国产编辑器EverEdit - 复制为RTF

1 复制为RTF 1.1 应用背景 在写产品手册或者其他文档时&#xff0c;可能会用到要将产品代码以样例的形式放到文档中&#xff0c;一般的文本编辑器拷贝粘贴到Word中也就是普通文本&#xff0c;没有语法着色&#xff0c;这样感观上不是太好&#xff0c;为了让读者的感观更好一点…

Redis 性能优化:多维度技术解析与实战策略

文章目录 1 基准性能2 使用 slowlog 优化耗时命令3 big key 优化4 使用 lazy free 特性5 缩短键值对的存储长度6 设置键值的过期时间7 禁用耗时长的查询命令8 使用 Pipeline 批量操作数据9 避免大量数据同时失效10 客户端使用优化11 限制 Redis 内存大小12 使用物理机而非虚拟机…

Spring Boot 集成 MongoDB:启动即注入的便捷实践

引言 在现代后端开发中&#xff0c;Spring Boot 凭借其快速开发、自动配置等特性深受开发者喜爱&#xff0c;而 MongoDB 以其灵活的文档存储结构和出色的扩展性&#xff0c;成为处理非结构化数据的首选数据库之一。将两者结合&#xff0c;利用 Spring Boot 的自动配置功能&…

半导体、芯片、人工智能、智能驾驶汽车的趋势

1. 市场增长与需求 汽车半导体市场&#xff1a;预计到2025年&#xff0c;中国汽车半导体市场仍将保持稳健增长态势&#xff0c;AI和能源将成为未来最重要的两大变革因素。2023年中国汽车电子芯片行业市场规模约为820.8亿元&#xff0c;预计2024年有望增至905.4亿元左右。随着新…

《多模态语言模型:一个开放探索的技术新领域》

核心主题 多模态语言模型的特点 仍处于探索和定义阶段没有固定的标准任务和评估方法研究方向高度开放 技术路径 主要存在两种方法&#xff1a; 后期融合(Late Fusion) 从语言模型backbone开始添加图像编码器效果稳定&#xff0c;成本可控 早期融合(Early Fusion) 从多模态数…

nginx实现TCP反向代理

当前实验环境&#xff1a; nginx已安装版本1.11.13 需要动态扩展安装模块nginx_tcp_proxy_module&#xff0c;实现tcp反向代理 实验步骤&#xff1a; 1、nginx当前版本1.11.13&#xff08;nginx已安装&#xff09; # /alidata/nginx/sbin/nginx -v nginx version: nginx/1.1…