Java List<T>流Stream常用API详细应用场景及示例代码

BG

Java List流Stream常用API详细应用场景及示例代码

    • 1. Stream简介
    • 2. 创建Stream
      • 示例代码:
    • 3. 中间操作
      • 3.1 根据createTime倒序排序
      • 示例代码:
      • 3.2 根据age倒序排序
      • 示例代码:
      • 3.3 role条件查询
      • 示例代码:
      • 3.4 获取sex为female的list集合
      • 示例代码:
      • 3.5 模糊查询phone中为155的list集合
      • 示例代码:
    • 4. 终止操作
      • 4.1 遍历
      • 示例代码:
      • 4.2 归约
      • 示例代码:
      • 4.3 收集
      • 示例代码:
    • 5. 组合操作
    • 6. 总结

在Java 8中引入的Stream API是处理集合的新方法,它提供了一种高效、函数式的方式来处理数据。本文将详细介绍Java List 流Stream的常用API,通过具体的应用场景和详细的示例代码,帮助读者深入理解和应用这一强大的工具。


1. Stream简介

Stream API是Java 8中新增的一个抽象,它允许你以一种声明式的方式处理数据集合(如列表、数组等)。Stream提供了许多用于操作数据的高级方法,如过滤、映射、排序等。


2. 创建Stream

要使用Stream,首先需要创建一个Stream实例。可以通过以下方式创建:

  • 从集合创建:stream()方法可以将任何集合转换为Stream。
  • 使用静态方法:Stream.of()可以创建一个包含指定元素的Stream。

示例代码:

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;public class StreamExample {public static void main(String[] args) {List<User> userList = Arrays.asList(new User(1, "张三", 25, "男", "13800138000", "zhangsan@example.com", "管理员", LocalDateTime.now(), LocalDateTime.now(), false),new User(2, "李四", 30, "女", "13900139000", "lisi@example.com", "普通用户", LocalDateTime.now(), LocalDateTime.now(), false),new User(3, "王五", 28, "男", "13700137000", "wangwu@example.com", "普通用户", LocalDateTime.now(), LocalDateTime.now(), false));// 从集合创建StreamStream<User> streamFromList = userList.stream();// 使用静态方法创建StreamStream<User> streamFromStatic = Stream.of(userList.toArray(new User[0]));}
}

3. 中间操作

中间操作是对Stream进行的一系列数据处理操作,如过滤、映射、排序等。这些操作会返回一个新的Stream,以便进行链式调用。

3.1 根据createTime倒序排序

sorted()方法用于对Stream中的元素进行排序。可以传入一个Comparator参数来自定义排序规则。

示例代码:

Stream<User> sortedByCreateTimeDesc = userList.stream().sorted(Comparator.comparing(User::getCreateTime).reversed());

3.2 根据age倒序排序

sorted()方法用于对Stream中的元素进行排序。可以传入一个Comparator参数来自定义排序规则。

示例代码:

Stream<User> sortedByAgeDesc = userList.stream().sorted(Comparator.comparingInt(User::getAge).reversed());

3.3 role条件查询

filter()方法用于根据条件过滤元素。它接受一个Predicate参数,用于判断元素是否满足条件。

示例代码:

Stream<User> filteredByRole = userList.stream().filter(user -> user.getRole().equals("管理员"));

3.4 获取sex为female的list集合

filter()方法用于根据条件过滤元素。它接受一个Predicate参数,用于判断元素是否满足条件。

示例代码:

List<User> femaleUsers = userList.stream().filter(user -> user.getSex().equals("女")).collect(Collectors.toList());

3.5 模糊查询phone中为155的list集合

filter()方法用于根据条件过滤元素。它接受一个Predicate参数,用于判断元素是否满足条件。

示例代码:

List<User> phoneContains155 = userList.stream().filter(user -> user.getPhone().contains("155")).collect(Collectors.toList());

4. 终止操作

终止操作是对Stream进行的最后一步操作,它会返回一个结果或者产生一个副作用。常见的终止操作有:forEach()reduce()collect()等。

4.1 遍历

forEach()方法用于遍历Stream中的元素。它接受一个Consumer参数,用于定义对每个元素的操作。

示例代码:

userList.stream().forEach(System.out::println);

4.2 归约

reduce()方法用于将Stream中的元素归约为一个值。它接受一个BinaryOperator参数,用于定义归约规则。

示例代码:

Optional<Integer> sumOfIds = userList.stream().map(User::getId).reduce((a, b) -> a + b);

4.3 收集

collect()方法用于将Stream中的元素收集到一个集合中。它接受一个Collector参数,用于定义收集规则。

示例代码:

List<User> adminList = userList.stream().filter(user -> user.getRole().equals("管理员")).collect(Collectors.toList());

5. 组合操作

可以将多个中间操作和终止操作组合在一起,形成一个完整的数据处理流程。例如:

List<User> sortedAdminList = userList.stream().filter(user -> user.getRole().equals("管理员")).sorted(Comparator.comparing(User::getId)).collect(Collectors.toList());

6. 总结

Java List流Stream的常用API来处理集合数据,能够极大提高代码的简洁性和可读性。


每日一笑

为什么程序员喜欢用黑色背景?因为白天黑夜对他们来说没区别。😂
为什么程序员喜欢递归?因为它让他们感到深度。😂
为什么程序员喜欢Linux?因为它有很多开源的爱。😂

编程就像攀登一座高山,不要害怕困难和挑战。只要你坚持不懈,不断学习和进步,最终你会到达山顶。加油!


END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/631028.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

npm内部机制与核心原理

npm 的核心目标&#xff1a; Bring the best of open source to you, your team and your company. npm 最重要的任务是安装和维护开源库。 npm 安装机制与背后思想 npm 的安装机制非常值得探究。Ruby 的 Gem&#xff0c;Python 的 pip 都是全局安装机制&#xff0c;但是 npm …

Root mapping definition has unsupported parameters: [all : {analyzer=ik_max_wor

你们好&#xff0c;我是金金金。 场景 我正在使用Springboot整合elasticsearch&#xff0c;在创建索引(分词器) 运行报错&#xff0c;如下 排查 排查之前我先贴一下代码 import org.elasticsearch.action.admin.indices.create.CreateIndexRequest; // 注意这个包SpringBootTe…

SpringBoot项目创建,详细流程

一、前言 Spring Boot是一个开源的Java框架&#xff0c;由Pivotal团队&#xff08;现为VMware旗下&#xff09;开发&#xff0c;通过提供默认配置和一系列启动器&#xff08;starters&#xff09;来简化项目配置&#xff0c;使得开发者能够快速启动和运行Spring应用程序。 ‍ …

从入门到实践,详解 Web 爬虫技术(IP池免费送)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Leetcode138_随机链表的复制

1.leetcode原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2.题目描述 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 …

解决 vue install 引发的 failed Error: not found: python2 问题

发生 install 异常时&#xff0c;提示信息如下所示&#xff1a; npm ERR! code 1 npm ERR! path U:\cnblogs\fanfengping-dtops\fanfengping-dtops-front\node_modules\node-sass npm ERR! command failed npm ERR! command U:\Windows\system32\cmd.exe /d /s /c node scripts…

北大字节联合发布视觉自动回归建模(VAR):通过下一代预测生成可扩展的图像

北大和字节发布一个新的图像生成框架VAR。首次使GPT风格的AR模型在图像生成上超越了Diffusion transformer。 同时展现出了与大语言模型观察到的类似Scaling laws的规律。在ImageNet 256x256基准上,VAR将FID从18.65大幅提升到1.80,IS从80.4提升到356.4,推理速度提高了20倍。 相…

PLC怎么接入互联网

几十年来&#xff0c;PLC都是用于现场设备的自动化控制。随着移动互联网技术的发展&#xff0c;移动办公的便捷性使PLC联网进行远程监控操作的需求越来越多。那PLC怎么接入互联网呢&#xff1f; PLC的通讯基本都是基于现场的通讯&#xff0c;无论是RS485,RS232还是 TCP协议&am…

泛微 E-Office 9.5版本存在ajax.php接口任意文件上传漏洞

声明&#xff1a; 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 简介 泛微 E-Office 9.5版本存在代码问题漏洞&#xff0c…

第二部分 Python提高—GUI图形用户界面编程(七)

菜单组件 文章目录 主菜单 GUI 程序通常都有菜单&#xff0c;方便用户的交互。我们一般将菜单分为两种&#xff1a;主菜单和快捷菜单(上下文菜单)。主菜单通常位于GUI 程序上方,通过鼠标右键单击某个组件对象而弹出的菜单&#xff0c;一般是与该组件相关的操作。 主菜单 主菜…

CUDA编程---线程束洗牌指令

从Kepler系列的GPU&#xff08;计算能力为3.0或更高&#xff09;开始&#xff0c;洗牌指令&#xff08;shuffle instruction&#xff09;作为一种机制被加入其中&#xff0c;只要两个线程在相同的线程束中&#xff0c;那么就允许这两个线程直接读取另一个线程的寄存器。 洗牌指…

太阳能路灯光伏板的朝向设计问题

题目&#xff1a;太阳能路灯光伏板的朝向设计问题 难度对标几乎每一年的国赛A题。 QQ群&#xff1a;592697532 公众号&#xff1a;川川菜鸟 文章目录 背景问题问题一问题二问题三 题目解读相关公式&#xff08;必备&#xff09;太阳辐射的计算光伏板接收的辐射光学效率大 气透…