Java零基础-集合:Java 8新增的集合操作
哈喽,各位小伙伴们,你们好呀,我是喵手。
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!
前言
Java是一种广泛应用于软件开发领域的高级编程语言,具有可移植性和跨平台的特性。在Java的发展过程中,不断有新的功能和语法特性引入,以便开发者能够更加方便和高效地编写代码。其中,在Java 8中引入了许多强大的集合操作,本文将重点介绍这些新增的集合操作。
摘要
Java 8新增的集合操作为开发人员提供了一种更简单,更灵活的方式来处理集合。这些新的操作包括流(Stream)、过滤器(Filter)、映射(Map)和归约(Reduce),它们可以大大简化编写和理解集合处理代码的过程。
简介
在Java 8之前,对集合进行操作通常需要使用循环或者迭代器来遍历集合元素,操作繁琐并且容易出错。而Java 8中引入的新的集合操作则提供了一种更加简洁和直观的处理方式。
源代码解析
流(Stream)
流是Java 8中引入的一种新的抽象,它可以作为集合的替代方式。通过使用流,我们可以更加方便地进行集合的操作和处理。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().filter(n -> n % 2 == 0).mapToInt(n -> n * 2).sum();
System.out.println(sum); // 输出:24
上述代码使用了流的链式调用,首先通过filter方法筛选出偶数,然后使用mapToInt方法将每个数乘以2,最后使用sum方法求和。
过滤器(Filter)
过滤器是一种用于筛选集合中元素的操作。我们可以使用过滤器来根据指定的条件过滤集合中的元素。
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<String> filteredNames = names.stream().filter(name -> name.startsWith("A")).collect(Collectors.toList());
System.out.println(filteredNames); // 输出:[Alice]
上述代码使用过滤器筛选出以字母"A"开头的名字,并将结果收集到一个新的列表中。
映射(Map)
映射是一种将集合中的元素进行转换或者提取的操作。我们可以使用映射操作将集合中的元素映射为新的值。
List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");
List<Integer> nameLengths = names.stream().map(name -> name.length()).collect(Collectors.toList());
System.out.println(nameLengths); // 输出:[5, 3, 7, 5]
上述代码使用映射操作将集合中每个名字的长度提取出来,并将结果收集到一个新的列表中。
归约(Reduce)
归约是一种将集合中的元素进行合并计算的操作。我们可以使用归约操作对集合中的元素进行求和、求平均值等操作。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream().reduce(0, (a, b) -> a + b);
System.out.println(sum); // 输出:15
上述代码使用归约操作对集合中的元素求和,初始值设为0,然后使用lambda表达式将两个数相加。
应用场景案例
Java 8新增的集合操作在实际开发中有许多应用场景。以下是一些示例:
- 数据过滤:筛选出满足特定条件的数据。
- 数据转换:将集合中的元素转换为不同的类型或者格式。
- 数据统计:对集合中的数据进行求和、求平均值等操作。
- 数据分组:将集合中的元素按照某个属性进行分组。
优缺点分析
Java 8新增的集合操作具有以下优点:
- 简化代码:使用流式操作可以减少代码量,提高代码的可读性。
- 提高效率:流式操作可以利用多核处理器,提高代码的执行效率。
- 增加灵活性:流式操作提供了丰富的操作方法,使得开发者能够更灵活地处理集合数据。
然而,Java 8新增的集合操作也存在一些缺点:
- 学习成本高:对于初学者来说,掌握流式操作的概念和使用方式可能需要一定的学习成本。
- 可读性降低:复杂的流式操作可能会降低代码的可读性,使得代码难以理解和维护。
类代码方法介绍
public class CollectionUtils {public static List<String> filterNames(List<String> names) {return names.stream().filter(name -> name.length() > 5).collect(Collectors.toList());}public static List<Integer> mapNumbers(List<Integer> numbers) {return numbers.stream().map(number -> number * 2).collect(Collectors.toList());}public static int sumNumbers(List<Integer> numbers) {return numbers.stream().reduce(0, (a, b) -> a + b);}public static List<String> groupNamesByFirstLetter(List<String> names, String letter) {return names.stream().filter(name -> name.startsWith(letter)).collect(Collectors.toList());}
}
上述代码是一个包含了一些常用集合操作方法的工具类。filterNames方法使用过滤器筛选出名字长度大于5的元素;mapNumbers方法使用映射操作将集合中的每个数乘以2;sumNumbers方法使用归约操作对集合中的数求和;groupNamesByFirstLetter方法使用过滤器筛选出以指定字母开头的名字。
Java代码测试用例
public class CollectionUtilsTest {@Testpublic void testFilterNames() {List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");List<String> filteredNames = CollectionUtils.filterNames(names);List<String> expected = Arrays.asList("Charlie");assertEquals(expected, filteredNames);}@Testpublic void testMapNumbers() {List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);List<Integer> mappedNumbers = CollectionUtils.mapNumbers(numbers);List<Integer> expected = Arrays.asList(2, 4, 6, 8, 10);assertEquals(expected, mappedNumbers);}@Testpublic void testSumNumbers() {List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);int sum = CollectionUtils.sumNumbers(numbers);assertEquals(15, sum);}@Testpublic void testGroupNamesByFirstLetter() {List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "David");List<String> groupedNames = CollectionUtils.groupNamesByFirstLetter(names, "A");List<String> expected = Arrays.asList("Alice");assertEquals(expected, groupedNames);}
}
上述代码是对集合操作方法的测试用例。使用JUnit框架进行断言,确保集合操作方法的正确性。
全文小结
本文介绍了Java 8新增的集合操作,包括流、过滤器、映射和归约。通过使用这些新的集合操作,我们可以更加方便和高效地处理集合中的元素。同时,本文还给出了一些应用场景案例以及优缺点,让大家能够避开这些坑。
… …
文末
好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。
… …
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
相关文章:
Java零基础-集合:Java 8新增的集合操作
哈喽,各位小伙伴们,你们好呀,我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。 我是一名后…...
C++经典面试题目(七)
1、什么是引用?请解释引用的概念和用法。 当谈论引用时,指的是在 C 中的一种类型。引用提供了对变量的别名,它允许通过不同的名称访问同一个变量。引用在 C 中常用于函数参数传递、返回值传递和操作符重载等场景。 引用的概念和用法&#x…...
让手机平板成为AI开发利器:AidLux
想ssh登录自己的手机吗? 想在手机上自由的安装lynx、python、vscode、jupyter甚至飞桨PaddlePaddle、Tensorflow、Pytorch和昇思Mindspore吗? 那么看这里....装上AidLux,以上全都有! AidLux是一个综合的AI开发平台,…...
Python物理学有限差分微分求解器和动画波形传播
🎯要点 Python数值和符号计算: 振动常微分方程:🎯中心差分求解器,绘制移动窗口研究长时间序列。🎯符号计算离散方程量化误差。🎯Python数值对比正向欧拉方法,反向欧拉方法…...
游戏本续航@控制中心的省电模式效果如何
文章目录 节能模式长续航模式👺相关工具 节能模式长续航模式👺 蓝天模具Control Center中的模式 根据我的试验,以及软件的提示,可以发现 Power Saving是最省电的,儿Quiet模式并不省电,它会启用独立显卡,只不过风扇的转速不像娱乐模式和性能模式那么积极而…...
centOS 安装MySQL8.0
1.配置yum仓库 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 2.安装MySQL8.x版本 yum库 rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch.rpm 或者 wget https://dev.mysql.com/get/mysql80-community-release-el7-2.noarch…...
力扣 1.两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回…...
Occupancy field----其他应用
文章目录 3D表示技术的概述:Signed Distance Function (SDF)Occupancy Field (占用场)神经辐射场(NeRF) Occupancy Networks 是一种基于Occupancy表示的可微分模型,它在与其他3D表示技术(例如点云、体素和三角面片&…...
Spring_MVC
web.xml配置文件 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://xmlns.jcp.org/xml…...
【动手学深度学习】深入浅出深度学习之线性神经网络
目录 🌞一、实验目的 🌞二、实验准备 🌞三、实验内容 🌼1. 线性回归 🌻1.1 矢量化加速 🌻1.2 正态分布与平方损失 🌼2. 线性回归的从零开始实现 🌻2.1. 生成数据集 &#x…...
2024/3/26 C++作业
定义一个矩形类(Rectangle),包含私有成员:长(length)、宽(width), 定义成员函数: 设置长度:void set_l(int l) 设置宽度:void set_w(int w) 获取长度:int…...
LinkedList讲解指南
咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好…...
IP如何异地共享文件?
【天联】 组网由于操作简单、跨平台应用、无网络要求、独创的安全加速方案等原因,被几十万用户广泛应用,解决了各行业客户的远程连接需求。采用穿透技术,简单易用,不需要在硬件设备中端口映射即可实现远程访问。 异地共享文件 在…...
HCIA-Datacom H12-811 题库补充(3/28)
完整题库及答案解析,请直接扫描上方二维码,持续更新中 OSPFv3使用哪个区域号标识骨干区域? A:0 B:3 C:1 D:2 答案:A 解析:AREA 号0就是骨干区域。 STP下游设备通知上游…...
轻量级富文本编辑 Trumbowyg —— 基于 jQuery 插件配置
使用方法👇 首先,添加jQuery到页面<body>位置: <script src"http://libs.baidu.com/jquery/1.8.3/jquery.min.js"></script> <script>window.jQuery || document.write(<script src"js/vendor/jquery-1.10.2.min.js&qu…...
那些王道书里的题目-----计算机网络篇
注:仅记录个人认为有启发的题目 p155 34.下列四个地址块中,与地址块 172.16.166.192/26 不重叠,且与172.16.166.192/26聚合后的地址块不会引入多余地址的是() A.172.16.166.192/27 B.172.16.166.128/26 …...
【前端学习——js篇】 10.this指向
具体见:https://github.com/febobo/web-interview 10.this指向 根据不同的使用场合,this有不同的值,主要分为下面几种情况: 默认绑定隐式绑定new绑定显示绑定 ①默认绑定 全局环境中定义person函数,内部使用this关…...
项目搭建之统一返回值
自定义枚举类 Getter public enum ReturnCodeEnum {/*** 操作失败**/RC999("999","操作XXX失败"),/*** 操作成功**/RC200("200","success"),/*** 服务降级**/RC201("201","服务开启降级保护,请稍后再试!"),/*** …...
嵌入式和 Java 走哪条路?
最近看到一个物联网大三学生的疑问,原话如下: 本人普通本科物联网工程专业,开学大三,现在就很迷茫,不打算考研了,准备直接就业,平时一直在实验室参加飞思卡尔智能车比赛,本来是想走嵌…...
C++ 控制语句(一)
一 顺序结构 程序的基本结构有三种: 顺序结构、分支结构、循环结构 大量的实际问题需要通过各种控制流程来解决。 1.1 顺序结构 1.2 简单语句和复合语句 二 循环 2.1 for循环 语句流程图 注意:使用for语句的灵活性 三 while语句 四 do while语句...
农业电商服务系统(10078)
有需要的同学,源代码和配套文档领取,加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码(前后端源代码SQL脚本)配套文档(LWPPT开题报告/任务书)远程调试控屏包运行一键启动项目&…...
干翻特斯拉?雷军说输给特斯拉不丢人
一周前的晚上,雷军和马斯克合照上了热搜。一周后的晚上,“雷军说输给特斯拉不丢人”又上了热搜。①5 月 21 日晚间小米有个发布会,雷军期间自问:“Model Y 是全球纯电车型的销冠,每年都有很多车型站出来要挑战 Model Y…...
Unity编辑器性能优化:工作流、场景与预制体三大资源创建瓶颈
1. 为什么编辑器资源创建环节是Unity性能优化的“隐形地雷区”很多人一提Unity性能优化,第一反应就是Profiler里看Draw Call、GC Alloc、CPU耗时,或者去改Shader、压贴图、拆合批。这没错,但90%的团队在项目中后期卡顿频发、打包失败、CI构建…...
JWT密钥轮换静默失效的热修复实战指南
1. 这不是漏洞公告,而是一份热修复作战手册Seedance2.0 v2.0.3上线刚满72小时,我们团队在灰度环境做JWT签名校验一致性压测时,发现一个反直觉现象:新签发的token在旧服务节点上能通过验签,但旧token在新节点上却频繁失…...
pytest Code Review skill.md
Skills 架构设计 本文深入探讨 Agent Skills 的技术架构和设计理念,帮助你理解 Skills 如何高效地扩展 Claude 的能力。 核心设计理念 Agent Skills 采用**渐进式披露(Progressive Disclosure)**架构,这是一种现代软件工程中的…...
【教程】全流程基于最新导则下的生态环境影响评价技术方法及图件制作与案例实践技术应用
专题一:生态环境影响评价框架及流程 以某既包含陆域、又包含水域的项目为主要案例,兼顾其它类型项目,主要内容包括: 1、生态环境影响评价基本思路与要求:工作程序、报告编制技术要求与规范 2、资料收集与初步踏勘&a…...
LangFuse与LangSmith区别
文章目录🔄 **核心定位对比**🎯 **适用场景差异**💡 **为什么两者并存?**🔄 核心定位对比 LangSmith(LangChain官方): 闭源产品,由LangChain官方提供深度集成ÿ…...
智慧校园之考场作弊事实识别图像数据集 考试作弊识别监控 学生作弊识别系统数据集 AI识别作弊数据集
考试违规检测数据集简介 类别 Tags 标签 Object DetectionClasses (2) 类别(2) Cheating 作弊 Not Cheating 未作弊项目详情数据集类别涵盖考试场景下多种违规行为类别,包括但不限于作弊工具使用、交头接耳、擅自离座、抄袭等典型违规场景数据…...
LeetCode 88:合并两个有序数组 | 双指针从后向前求解
LeetCode 88:合并两个有序数组 | 双指针从后向前求解 引言 合并两个有序数组(Merge Sorted Array)是 LeetCode 第 88 题,难度为 Easy,但却是双指针法应用的经典案例。题目要求将两个已排序的数组 nums1 和 nums2 合并…...
Agent 一接文件树就开始改错目录:从 Working Directory Claim 到 Path Scope Fence 的工程实战
不少团队把文件树接进 Agent 后,第一次翻车往往不是改不动代码,而是改到了错误目录。一个修复本该落在 services/api,结果模型顺手把 infra/terraform 里的同名文件也改了;一个看似无害的批量替换,把 monorepo 里另一条…...
